实时线程中的 ZeroMQ inproc PubSub send() 调用会导致严重的阻塞吗?

Will a ZeroMQ inproc PubSub send() call in a realtime thread cause serious blocking?

本文关键字:ZeroMQ 线程 inproc PubSub 实时 send 调用      更新时间:2023-10-16

一般来说,实时生产者线程需要一个环形缓冲区才能获得不错的性能。

但就我而言,我有一些延迟限制,所以我很想摆脱 Producer 的环形缓冲区,并在单个数据缓冲区出现时将其推出。然后,我只会在消费者(较慢(端进行环形缓冲。而且我很想避免通过关键部分锁定线程。

由于 ZMQ 不需要线程锁定,我想知道是否可以为此使用inprocPubSub 模式。知道网络I/O在实时线程中不受欢迎,我仍然很好奇inproc协议是否可以产生任何影响,即更好的性能。

所以问题是:我可以使用带有inproc协议的 ZMQ PubSub 在实时线程中实现低延迟无锁/无阻塞数据传输吗?

我可以使用带有inproc协议的 ZMQ PubSub 在实时线程中实现低延迟无锁/无阻塞数据传输吗?

是的。


刚好足以实例化一个无线程Context(0)实例:

使用 inproc 传输传递消息时不涉及任何 I/O 线程。因此,如果仅将ØMQ上下文用于进程内消息传递,则可以使用零I/O线程初始化上下文


关联(明智规划的绑定(技巧可能会进一步减少几百[ns],因为可以避免所有 R/T 处理承受从核心到内核 NUMA 的非本地内存访问的大量附加延迟成本。