我想知道是否允许ZeroMQ REP
套接字在一个线程中的传入数据上被poll()
编码,并用于从另一个线程发送数据。
我要遵循的想法如下:
只要REP
套接字没有发送对传入请求的答复,它就不会接收任何内容。因此,如果为这样的套接字调用了zmq_poll()
,它将被阻塞(直到超时或永远)。
现在,尽管此套接字是用于传入数据的zmq_poll()
调用的一部分,但是如果另一个线程准备了一个答复并使用此套接字发送此答复,会发生什么情况。
这样做是否安全?是否可以进行比赛?
最佳答案
ZeroMQ已建立在一些准则的基础上。
零共享是这些核心准则之一。
尽管用户可以自己承担风险进行共享实验,但ZeroMQ最佳实践避免这样做,除非很少且非常具体的情况且不在套接字级别。套接字是已知的不是线程安全的,因为它具有更高的整体性能和更低的延迟。
这就是为什么问题“如果另一个线程...会发生什么”听起来合理的原因,而不是在ZeroMQ最佳实践区域的范围之内。
关于multithreading - 在ZeroMQ中从多个线程到zmq_poll()一个REP套接字+ send()安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46655162/