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

标签 c++ multithreading locking zeromq nonblocking

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

但就我而言,我有一些延迟限制,因此我希望摆脱 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/

相关文章:

c++ - QtConcurrent 在 App 即将退出时等待完成

c++ - 如何在类中使用 pthread_mutex 及其函数?

c++ - 结构的结构作为参数

c++ - VisualStudio 2010 Express 上的 RDTSC - C++ 不支持默认整数

C++ 字符串数组排序

c++ - Boost:创建一组线程并等待它们的正确用法是什么?

c++ - 创建流 vector

ruby-on-rails - Rails 4 多线程和 connection_pool 问题

python - Python 中的命名可重入/递归锁 (RLock)

c++ - openmp中的重入锁