nic*_*ine 4 python zeromq pyzmq
我正在从DEALER一个ROUTER使用发送20000条消息pyzmq.
当我在每条消息之间暂停0.0001秒时,它们都会到达,但如果我通过暂停每条消息0.00001将它们发送速度提高10倍,则只有大约一半的消息到达.
是什么导致了这个问题?
ZMQ IO线程的默认设置 - 负责操作模式.
如果你投入时间并深入了解优秀的ZMQ概念和架构,我敢于称之为问题.
从早期版本的ZMQ库开始,就有一些重要的参数可以帮助中心杰作(IO线程)保持稳定和可扩展的理由,从而为您提供这个强大的框架.
零共享/零复制/(几乎)零延迟是不能实现零成本的格言.
该ZMQ.Context实例具有相当丰富的内部参数化,可通过API方法进行修改.
让我引用一个奇妙而宝贵的资料--Pieter HINTJENS的书,Code Connected,第1卷.
(绝对值得花时间和逐步完成PDF副本.C语言代码片段不会伤害任何人的pythonic心态,因为关键信息在Pieter已经制作成300多个令人兴奋的页面的文本和故事中).
高水位标志
当您可以在进程之间快速发送消息时,您很快就会发现内存是一种宝贵的资源,并且可以轻松填满.除非您了解问题并采取预防措施,否则在进程中的某个地方延迟几秒钟可能会变成耗尽服务器的积压.
...
ØMQ使用
HWM(高水位线)概念来定义其内部管道的容量.从套接字或套接字出来的每个连接都有自己的管道,HWM用于发送和/或接收,具体取决于套接字类型.某些套接字(PUB,PUSH)只有发送缓冲区.有些(SUB,PULL,REQ,REP)只有接收缓冲区.有些(DEALER,ROUTER,PAIR)必须同时发送和接收缓冲区.在ØMQv2.x中,
HWM默认为无限.这很容易,但对于大批量发布商来说通常也是致命的.在ØMQv3.x中,默认设置为1,000,这更为明智.如果您仍在使用ØMQv2.x,则应始终设置HWM套接字,为1,000以匹配ØMQv3.x或另一个考虑到您的消息大小和预期用户性能的数字.当您的套接字到达其HWM时,它将阻止或丢弃数据,具体取决于套接字类型.
PUB而ROUTER如果他们达到他们的插座会丢弃数据HWM,而其它的套接字类型将发生阻塞.在inproc传输过程中,发送方和接收方共享相同的缓冲区,因此实际值HWM是HWM双方设置的总和.最后,
HWM-s不准确; 虽然默认情况下您可能会获得多达1,000条消息,但由于libzmq实现其队列的方式,实际缓冲区大小可能会低得多(只有一半).
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |