创建多个 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 可扩展的正式通信原型,更符合需求。