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

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

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

但在我的例子中,我有一些延迟限制,所以我很想摆脱 Producer 的环形缓冲区,并在它们出现时推出单独的数据缓冲区。然后我只在消费者(较慢)端使用环形缓冲区。而且我很想避免通过关键部分进行线程锁定。

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

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

Q : Can I achieve low-latency lock-free/blocking-free data delivery in a realtime thread using ZMQ PubSub with inproc protocol?

是的。


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

No I/O threads are involved in passing messages using the inproc transport. Therefore, if you are using a ØMQ context for in-process messaging only you can initialise the context with zero I/O threads


亲和力(明智地计划绑定)技巧可能会进一步削减数百 [ns],因为可能会避免所有 R/T 处理承担从核心到 - 的大量附加延迟成本核心 NUMA-非本地内存访问。