ZMQ异步,具体是如何工作的?

ZMQ asynchronous, how does it work exactly?

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

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

我经常犯异步和多线程结合的错误。当我查看 zmqsocket 的人时,我看到对于 DEALER 或 ROUTER 套接字,传入路由设置为 "Fair-queued"。由此我得出结论,异步意味着您可以在套接字上写入或读取,而无需等待发送另一个请求的应答(一切都排队并同步处理)。

那么问题来了,

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

Zeromq 只创建一个线程。没有为请求或套接字创建额外的线程。

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

后台线程正在使用 epoll 或 kqueue 来执行异步操作。

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