2010-09-12 4 views
3

Я разрабатываю распределенную систему, в которой однопоточный сервер обрабатывает интенсивную работу с ЦП. Эти операции инициируются сетевыми сообщениями ZeroMQ.Блокирующие операции и ZeroMQ

Если однопоточный процесс выполняет интенсивную работу с ЦП, будут ли блокировки ввода/вывода (ZeroMQ)?

Спасибо!

ответ

5

Вы будете блокировать чтение сообщений, если нет сообщений для чтения.

Вы будете блокировать отправку, если количество выдающихся сообщений превышает ZMQ_HWM (по умолчанию у него нет ограничений, но есть практический предел в отношении того, сколько у вас памяти). Кажется, что это зависит от типа сокета, если сообщения просто отбрасывается (вы не будете блокировать в этом случае), когда этот предел будет достигнут.

Вы можете указать флаг ZMQ_NOBLOCK, если вы не хотите блокировать ни в одном из случаев - zmq_send/zmq_recv будет сбой вместо блока в этих случаях.

+2

Эти правила не являются абсолютными. См. Http://api.zeromq.org/zmq_socket.html и характеристические сводки для каждого типа сокета. – ysimonson

Смежные вопросы