一般来说,实时生产者线程需要一个环形缓冲区才能获得良好的性能。
但就我而言,我有一些延迟限制,因此我希望摆脱 Producer 的环形缓冲区,并在单个数据缓冲区出现时将其推出。然后,我仅在消费者(较慢)端进行环形缓冲。我希望避免通过关键部分进行线程锁定。
由于 ZMQ 不需要线程锁定,我想知道是否可以使用 inproc
PubSub 模式来实现此目的。知道网络 I/O 在实时线程中不受欢迎,我仍然很好奇 inproc
协议(protocol)是否会产生任何影响,即更好的性能。
所以问题是:我可以使用带有 inproc
协议(protocol)的 ZMQ PubSub 在实时线程中实现低延迟无锁/无阻塞数据传输吗?
最佳答案
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
亲和性(明智计划的绑定(bind))技巧可能会进一步减少数百个[ns]
,因为可能避免所有 R/T 处理承担从核心到核心的大量附加延迟成本。 -核心 NUMA-非本地内存访问。
关于c++ - 实时线程中的 ZeroMQ inproc PubSub send() 调用会导致严重阻塞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126624/