|
|
ru.unix- RU.UNIX ---------------------------------------------------------------------- From : Alexander Pevzner 2:5020/400 04 Nov 2000 01:47:33 To : Lev Serebryakov Subject : Re: Потеря сигналов --------------------------------------------------------------------------------
Hello, Lev Serebryakov!
Fri, 03 Nov 2000 22:05:21 +0300 you wrote to Anton Petrusevich:
LS> AP>> Делай не блокирующий. Блокирующие лучше вообще не делать.
LS> LS>> И спать секунду? Долго -- если сообщения прут пачкой хочется
LS> LS>> получать несколько в секунду. Вообще не спать -- члишком
LS> LS>> процессор в цикле загрузится. usleep() везед есть?
LS> AP> select точно везде есть. Его можно пользовать, чтоб спать на
LS> AP> сколько надо. У меня на 20msec. Загрузка при этом ~0.
LS> Хммм... А мы имеем право делать select() на message queue? Hе
LS> знал. Спасибо.
Рано благодаришь :-) Селект тебе порекомендовали в качестве
портабельной задержки на небольшое время: передаешь ему NULL'ы
вместо всех 3-х fd_set'ов, а в timeout прописываешь желаемую задержку.
А кстати, нафига тебе message queue? Используй лучше unix domain sockets.
Они явно менее кривые, и на них можно делать select() :-)
У меня такое чувство, что SysV API везде поддерживается только для
совместимости, почти никто с ним не работает, и поэтому он толком не
отлажен. Я наблюдал, как msgrcv() в линухе (2.2.17) не просыпался по
SIGCHLD, причем сигнал оставался в полудоставленном состоянии, и если на
программу в таком состоянии напустить strace -p, то именно в этот момент
она просыпалась и получала свой сигнал.
Кроме того, по моим тестам датаграмные unix domain sockets работали
быстрее, чем message queue (опять же, в линухе). Hо цифр я не запомнил,
sorry.
--
Wishes, Alexander Pevzner (pzz@pzz.msk.ru)
--- ifmail v.2.15dev5
* Origin: Private Node of Alexander Pevzner (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix/897525c69a7a.html, оценка из 5, голосов 10
|