从ZeroMQ到zmq_poll()来自多个线程的REP套接字+ send()是否安全?

时间:2017-10-09 21:20:10

标签: multithreading sockets zeromq polling reply

我想知道ZeroMQ REP 套接字是否允许poll() - 对一个线程中的传入数据进行编辑,并用于从另一个线程发送数据。 / p>

我想要遵循的想法如下:
REP套接字不会收到任何内容,只要它没有向传入请求发送回复即可。因此,如果为这样的套接字调用zmq_poll(),它只会阻塞(直到超时或永远)。

现在,虽然此套接字是zmq_poll()调用传入数据的一部分,但如果另一个线程准备了一个回复并使用此套接字发送此回复,会发生什么。

这样做是否安全或是否有竞争条件?

1 个答案:

答案 0 :(得分:0)

ZeroMQ建立在一系列格言之上。

零分享是这些核心格言之一。

虽然用户可以通过共享进行自己的风险实验,但ZeroMQ最佳做法可以避免这样做,除非极少数和非常具体的情况,而不是套接字级别。为了更高的整体性能和更低的延迟,套接字在故意上不是线程安全的。

这就是为什么一个问题“如果另一个线程会发生什么......”听起来合法,但不在ZeroMQ Best Practices区域内的原因。