Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Yar Tikhiy                           2:5020/118     07 Apr 2000  16:37:40
 To : "Dmitry S. Rzhavin"
 Subject : Re: Блокировка
 -------------------------------------------------------------------------------- 
 
 DSR> 2) Есть некий процесс, сидит и ловит UDP. Пакеты могут поступать
 DSR> очень часто, а обработка пакета может занять тучу времени. Терять
 DSR> пакеты ооочень не хочется (повторять их никто не будет, а надежность
 DSR> линии и так не гарантирована). Скорее всего, надо разделить на 2
 DSR> процесса: один сидит, ловит пакеты и скармливает их второму. Второй
 DSR> уже их обрабатывает. Вопрос: как обеспечить достаточно большой буфер
 DSR> для обмена (чтобы 1й никогда не вис из-за невозможности в него
 DSR> записать),
 DSR> а при этом 2й наоборот автоматически стопился, если буфер пуст (а не
 DSR> висел в вечном цикле с проверкой буфера)?
 
 Non-blocking i/o спасет тебя :-) То есть процесс 1 должен открыть
 udp и ipc сокеты в режиме O_NONBLOCK и в цикле делать с помощью
 select/poll следующее:
 - select/poll на оба сокета;
 - если есть udp данные - прочесть и записать в буфер;
 - если можно записать в ipc сокет, а буфер не пуст - извлечь из буфера
   и записать в ipc сокет.
 
 Во втором процессе можно просто открыть ipc-соединение (тогда
 ввод-вывод будет по умолчанию блокирующим), тогда read/recv будет
 блокироваться при отсутствии данных и ждать их поступления.
 
 SY, Yar
 --- ifmail v.2.15dev4
  * Origin: Chemistry Dept. of Moscow State University (2:5020/118)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Блокировка   Yar Tikhiy   07 Apr 2000 16:37:40 
Архивное /ru.unix.bsd/116839a10abdb.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional