我正在使用zmq来跨进程传递消息,我想做一些性能测试以获得延迟和整个过程 .
官方网站提供指导告诉How to Run Performance Tests
例如,我尝试过:
local_lat tcp://*:15213 200 100000
remote_lat tcp://127.0.0.1:15213 200 100000
得到结果:
message size: 200 [B]
roundtrip count: 100000
average latency: 13.845 [us]
但是当在C中尝试pub-sub example时,我发现发送和接收之间的时间间隔大约是150us . (我通过带有时间戳的打印日志获得结果)
有人可以解释这两者之间的区别吗?
EDIT: 我发现问题0mq: pubsub latency continually growing with messages?结果给出了几乎恒定的0.00015s延迟,即150us,与我的测试相同,是官方性能测试的10倍 . 为什么有区别?
1 回答
我遇到了同样的问题:ZeroMQ - pub / sub latency
我在我的示例代码上运行wireshark,每秒发布一个zeromq消息 . 这是wireshark的输出:
正如您所看到的,发送和确认每条消息大约需要45微秒 . 起初我以为连接正在重新 Build 在每条消息上,但事实并非如此 . 所以我把注意力转向接收器......
通过添加ZMQ_NOBLOCK并在艰难的while循环中进行轮询,我将时间缩短到100us . 这仍然看起来很大,而且它的代价是飙升一个核心 . 但我确实觉得我对问题的理解稍微好一些 . 任何见解将不胜感激 .