yigal_s' Journal
[Most Recent Entries]
[Calendar View]
[Friends View]
Friday, November 23rd, 2012
Time |
Event |
12:45p |
кто в лес, кто по дрова Как это мило, что в Линуксе блокирующие операции, вплоть до waitPid и чтения с терминала не абортируются (по умолчанию) сигналами, то есть, рестартуются прозрачно от пользователя, при этом функция sleep() таки сигналом прерывается, равно как и функция select, при этом вырубать сигналом select чревато возможностью потерять этот сигнал и заблокироваться в select (можно считать это race-condition), при этом добавлена эзотерическая функция pselect, которая от этой проблемы не страдает, но которая в некоторых версиях glibc/uclibc тихонечно снова реализована через вызов старого системного вызова, и посему таки страдает от race condition. Что до Виндов, то функция CancelSynchronousIo, я не проверял, но сильно подозреваю, может страдать от того ж race condition, что и посылка сигнала под Юниксом, т.е. она может быть вызвана слишком рано, когда I/O операция еще не началась и абортировать нечего. Отдельная милая подробность - она доступна начиная с Висты/2008. Вообще, что там под Виндами с возможностью абортировать текущие операции, можно ли там использовать функцию select для работы с файлами, а не сокетами, итд итп., и если можно, то как её можно абортнуть - я вообще очень не в курсе деталей. Зато под Виндами есть вообще дважды неблокирующая ))) функция WSAAsyncSelect, чтоб уж можно было не просто ждать, но ждать асинхронно ))). Раз уж мы заговорили об асинхронных операциях, стоит напомнить о том, что для них, вроде бы, есть возможность их отменять из текущего треда начиная с Windows XP (функция CancelIo). Т.е., конечно, еще надо б посмотреть как там насчет багов, и вообще абортировать функцию из своего же треда - та ещё морока, но в принципе, если это хорошо завернуть, по идее можно сделать синхронную функциональность с возможностью терминации из внешнего треда. Опять же, начиная с Висты имеется достаточно с виду вменяемая CancelIoEx... Но в целом, как-то всё это выглядит ужасно сырым и непроработанным. Вот же простая задача - найти тьюториал, где будет четко описано как писать блокирующий ввод-вывод с возможностью надежной терминации из внешнего треда. Надо б поискать, как это сделано в Java и в COM. Upd: вот, кстати, люди http://stackoverflow.com/questions/13357019/how-to-know-if-a-linux-system-call-is-restartable-or-not утверждают, что то, что некоторые функции можно прервать сигналом, даже если у сигнала есть аттрибут SA_RESTART -- это баг. | 1:09p |
Пространство интернета освоили полиглоты, знающие по 8 языков и пытающиеся свой опыт изучения языков капитализировать, т.е. обучить (за деньги) других людей способам правильного и эффективного изучения языков. Например, один полиглот создал (кажется, по его словам, для собственных нужд изначально) сайт http://lingq.com, куда забабахал весьма тривиальный, и несмотря на это, совершенно прекрасный, неожиданный и революционный интерфейс для чтения текстов. Можно там поучиться и забесплатно, но так чтобы от trial версии перейти на вариант со снятыми ограничениями, придется заплатить 120$ в год. Совершенно мелкие деньги при условии, что методика для вас сработает. ИМХО, там уже набралась прекрасная подборка текстов и аудиотреков, что ценно вообще безотносительно всяких методик. Другой полиглот вот тут http://www.fluentin3months.com/lingq-review/ даёт объемный критический обзор этого сайта, весьма его хвалит, рекомендует как им пользоваться эффективно и забесплатно, и заодно предлагает воспользоваться бесплатным софтом, реализующими те же самые идеи: http://www.fluentin3months.com/learning-with-texts/А вот еще один товарищ http://www.thepolyglotdream.com/author/thepolyglotdream/, у него софта, вроде б нет, но он ведёт блог и пишет ролики, где тоже разъясняет свой взгляд на проблему. В общем, жизнь явно не стоит на месте. |
|