Блокировка операций и ZeroMQ - PullRequest
3 голосов
/ 12 сентября 2010

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

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

Спасибо!

1 Ответ

5 голосов
/ 13 сентября 2010

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

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

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

...