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