gpt4 book ai didi

c++ - Zmq 上下文 - 我应该在新线程中创建另一个上下文吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:45 24 4
gpt4 key购买 nike

我有几个服务器应用程序使用我创建的共享 ZMQ 类。偶尔当这些服务器处理请求时,它们需要发送消息到另一个 ZMQ 服务器。我是 ZMQ 的新手,所以我想确保我理解正确。

处理服务器监听器的类创建一个zmq::context_tzmq::socket_t,并绑定(bind)套接字。这无限地在一个单独的线程上运行。当这个服务器需要在另一个函数中发送消息时(完全脱离这个 ZMQ 类),我是否需要在这里生成一个新的上下文并发送消息,或者我是否应该以某种方式将相同的上下文传递给这个类(on一个不同的线程),绑定(bind)一个新的套接字然后从那里去?

如果是前者,我使用什么数字来初始化新上下文是否重要,或者 context( 1 ) 是否正常?指南中有一部分说创建第二个上下文就像拥有多个 ZMQ 实例,我认为这并不重要,因为它仅用于发送文件然后关闭。但我可能错了?

最佳答案

简而言之:context 的单个实例和单个 I/O 线程可能就是您所需要的。更详细:

Per the docs上下文是线程安全的。请注意,原始的 0MQ 套接字 通常不是(有一些更新的、草拟的、设计成这样的套接字)。

来自FAQ :

What is the optimal number of I/O threads for best performance?

The basic heuristic is to allocate 1 I/O thread in the context for every gigabit per second of data that will be sent and received ( aggregated ). Further, the number of I/O threads should not exceed ( number_of_cpu_cores - 1 ).

另一件需要注意的事情是 inproc:// 传输类套接字 must be created in the same context.

除非您要传输多个千兆比特/秒,否则我建议您使用单个 I/O 线程为整个进程使用一个上下文。

此外,作为准则,0MQ 上下文旨在“长期存在”。在应用程序的单次运行中创建/销毁多个上下文是不寻常的。这通常也适用于 0MQ 套接字。如果您正在创建/销毁许多套接字,您可能采用了错误的方法。

关于c++ - Zmq 上下文 - 我应该在新线程中创建另一个上下文吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45154956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com