Безопасно ли в ZeroMQ использовать zmq_poll() сокет REP + send() из нескольких потоков?

Мне интересно, если ZeroMQ REP розетка может быть poll() -ed на входящие данные в одном потоке и используется для отправки данных из другого потока.

Идея, которой я пытаюсь следовать, заключается в следующем:
REP Сокет ничего не получит, пока не отправит ответ на входящий запрос. Таким образом, если zmq_poll() был вызван для такого сокета, он просто заблокировал (до тайм-аута или навсегда).

Теперь, пока этот разъем является частью zmq_poll() вызов для входящих данных, что происходит, если другой поток подготовил ответ и использует этот сокет для отправки этого ответа.

Безопасно ли это делать или возможны гоночные условия?

1 ответ

ZeroMQ был основан на нескольких принципах.

Разделение нуля является одним из основных принципов.

В то время как пользователь может на свой страх и риск экспериментировать с совместным использованием, лучшие практики ZeroMQ избегают этого, за исключением очень немногих и очень специфических случаев, а не на уровне сокетов. Сокеты заведомо не поточнобезопасны из-за более высокой общей производительности и меньшей задержки.

По этой причине вопрос "Что произойдет, если другой поток..." может звучать правомерно, но не в зоне ZeroMQ Best Practices.

Другие вопросы по тегам