multithreading - 在ZeroMQ中从多个线程到zmq_poll()一个REP套接字+ send()安全吗?

标签 multithreading sockets zeromq polling reply

我想知道是否允许ZeroMQ REP 套接字在一个线程中的传入数据上被poll()编码,并用于从另一个线程发送数据。

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

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

这样做是否安全?是否可以进行比赛?

最佳答案

ZeroMQ已建立在一些准则的基础上。

零共享是这些核心准则之一。

尽管用户可以自己承担风险进行共享实验,但ZeroMQ最佳实践避免这样做,除非很少且非常具体的情况且不在套接字级别。套接字是已知的不是线程安全的,因为它具有更高的整体性能和更低的延迟。

这就是为什么问题“如果另一个线程...会发生什么”听起来合理的原因,而不是在ZeroMQ最佳实践区域的范围之内。

关于multithreading - 在ZeroMQ中从多个线程到zmq_poll()一个REP套接字+ send()安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46655162/

相关文章:

c++ - 以 "almost always auto"样式初始化 ZeroMQ 2.2 消息要使用私有(private)构造函数

c++ - 如何处理线程函数中的重复代码?

android - 与 AsyncTask 线程通信?处理程序不工作?

c++ - 无法通过 C 中的 UDP 套接字接收完整整数数组

python - 试图断开玩家

javascript - Meteor.methods 与 ZeroMQ REQ/REP 从不返回答案

c# - ManagedThreadID与操作系统ThreadID的关系

java - 如何控制很多java线程?

python - Python 中的数据包嗅探器

linux - 如何将项目(比如zeromq)构建为静态库并将其链接到我的项目中