ZMQ异步,它到底是如何工作的?

Fre*_*oul 3 c c++ multithreading asynchronous zeromq

我目前正在从事一个需要快速网络管理的项目。为此,我选择了 0MQ,但在阅读了 0MQ 给出的文档和示例后。关于 0MQ 的异步部分,我很难理解。

是否为 ROUTER 或 DEALER 套接字上的每个请求创建任何线程?

我经常犯将异步和多线程结合起来的错误。当我查看zmqsocket的 man 时,我发现对于 DEALER 或 ROUTER 套接字,传入路由设置为“公平队列”。由此我得出结论,异步意味着您可以在套接字上写入或读取,而无需等待答案来发送另一个请求(所有内容都排队并同步处理)。

所以这是问题,

0MQ 是否针对每个请求创建了任何线程?(我不是在谈论0MQ内部使用的后台线程来管理消息队列)。

som*_*ron 5

Zeromq 仅创建一个线程。不会为请求或套接字创建额外的线程。

后台线程完成所有工作,用户线程使用队列和文件描述符与后台线程通信。

后台线程使用 epoll 或 kqueue 来实现异步魔法。

您实际上可以控制后台线程的数量,但通常是一个。