创建多个 ZeroMQ 套接字的开销是多少?
What is the overhead for creating multiple ZeroMQ sockets?
我尝试使用 ZMQ_PAIR
套接字构建点对点通道。但是 ZMQ_PAIR
套接字只允许独占连接,这意味着如果一个对等点(A)连接到另一个对等点(B),其他对等点不能连接到 B,直到 A 与 B 断开连接。
因此,我想到的第一个解决方案是设置与网络中对等点数量一样多的 ZMQ_PAIR
套接字,并轮询套接字以多路复用来自其他对等点的事件。这样做的问题是要管理很多套接字,这可能会产生不可忽略的开销。
但我没有关于管理多个套接字的开销的实验数据,例如创建 50,000 个 ZMQ_PAIR
个套接字的时间或轮询 50,000 个 ZMQ_PAIR
个套接字的时间。当然,我自己也可以做,但我想知道是否有使用ZeroMQ的研究人员或网络开发人员进行的现有实验。
(我不想要任何代理或 REQ/REP
模式。使用代理会导致一些性能下降,我想要纯对等网络。并且 REQ/REP
模式本质上是同步通信,它现在不是我的目的。)
一般来说,这不是一个容易回答的思想实验。
在做决定之前一定要进行基准测试。
ZeroMQ 有自己的简单智能时钟工具,Stopwatch()
。每个实例都有 .start()
和 .stop()
方法,因此您的代码可以独立地对每个关键部分进行基准测试,最多 [us]
分辨率,所以你准备好了。
在从头开始求解 50k+ 大小的网格之前,人们可能会合理地开始仅设置和基准测试 1、10、20、50、100、200 个实例,从而为进一步缩放观察到的行为提供合理的依据。
[SPACE]
-域(内存分配)和[TIME]
-域都会很重非线性,因为规模将扩大到 50k+ 水平。
下一个问题来自非均匀传输-class 混合物。 inproc://
的开销最少,而某些 L3+ 传输协议将需要比其他协议大得多的开销。
人们可能还喜欢测试 nanomsg
,因为它具有 NN_BUS
可扩展的正式通信原型,更符合需求。
我尝试使用 ZMQ_PAIR
套接字构建点对点通道。但是 ZMQ_PAIR
套接字只允许独占连接,这意味着如果一个对等点(A)连接到另一个对等点(B),其他对等点不能连接到 B,直到 A 与 B 断开连接。
因此,我想到的第一个解决方案是设置与网络中对等点数量一样多的 ZMQ_PAIR
套接字,并轮询套接字以多路复用来自其他对等点的事件。这样做的问题是要管理很多套接字,这可能会产生不可忽略的开销。
但我没有关于管理多个套接字的开销的实验数据,例如创建 50,000 个 ZMQ_PAIR
个套接字的时间或轮询 50,000 个 ZMQ_PAIR
个套接字的时间。当然,我自己也可以做,但我想知道是否有使用ZeroMQ的研究人员或网络开发人员进行的现有实验。
(我不想要任何代理或 REQ/REP
模式。使用代理会导致一些性能下降,我想要纯对等网络。并且 REQ/REP
模式本质上是同步通信,它现在不是我的目的。)
一般来说,这不是一个容易回答的思想实验。
在做决定之前一定要进行基准测试。
ZeroMQ 有自己的简单智能时钟工具,Stopwatch()
。每个实例都有 .start()
和 .stop()
方法,因此您的代码可以独立地对每个关键部分进行基准测试,最多 [us]
分辨率,所以你准备好了。
在从头开始求解 50k+ 大小的网格之前,人们可能会合理地开始仅设置和基准测试 1、10、20、50、100、200 个实例,从而为进一步缩放观察到的行为提供合理的依据。
[SPACE]
-域(内存分配)和[TIME]
-域都会很重非线性,因为规模将扩大到 50k+ 水平。
下一个问题来自非均匀传输-class 混合物。 inproc://
的开销最少,而某些 L3+ 传输协议将需要比其他协议大得多的开销。
人们可能还喜欢测试 nanomsg
,因为它具有 NN_BUS
可扩展的正式通信原型,更符合需求。