实时线程中的 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 在实时线程中实现低延迟无锁/无阻塞数据传输吗?
问:我可以使用带有
inproc
协议的 ZMQ PubSub 在实时线程中实现低延迟无锁/无阻塞数据传输吗?
是的。
刚好足以实例化一个无线程Context(0)
实例:
使用 inproc 传输传递消息时不涉及任何 I/O 线程。因此,如果仅将ØMQ上下文用于进程内消息传递,则可以使用零I/O线程初始化上下文
关联(明智规划的绑定(技巧可能会进一步减少几百[ns]
,因为可以避免所有 R/T 处理承受从核心到内核 NUMA 的非本地内存访问的大量附加延迟成本。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- zeromq 在 I/O 线程中引发异常
- 如何在 MFC 应用程序中启动 ZeroMQ 线程?
- ZeroMQ 在使用 std::thread 创建工作线程时崩溃
- ZeroMQ:如何使用inproc减少多线程通信延迟
- 实时线程中的 ZeroMQ inproc PubSub send() 调用会导致严重的阻塞吗?
- 与处理 ZeroMQ 的永久线程与 Qt 通信
- 在官方 ZeroMQ 多线程示例的修改版本中崩溃
- 每个线程或每个调用一个 ZeroMQ 套接字
- 在ZeroMQ中实现无锁的多线程应用程序
- 立即从另一个线程中止zeromq-recv()或poll(),而无需等待超时