- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有几个服务器应用程序使用我创建的共享 ZMQ 类。偶尔当这些服务器处理请求时,它们需要发送消息到另一个 ZMQ 服务器。我是 ZMQ 的新手,所以我想确保我理解正确。
处理服务器监听器的类创建一个zmq::context_t
和zmq::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/
嘿。本周的一个教程,其中一个问题要求通过使用其他函数 formatLine 和 formatList 创建一个函数 formatLines,以格式化行列表。 我的代码是这样的; type Line =
我是一名优秀的程序员,十分优秀!