c++ - 哪个是更好的架构?多个 SPSC 队列还是一个 MPSC 队列?

标签 c++ multithreading low-latency

我正在使用 C++ 编写 HFT 应用程序,因此低延迟非常重要。我使用无锁队列实现。

我的系统中主要有2个生产者线程Producer1和Producer2,以及1个消费者线程Consumer1。

Producer1 产生 EventA 和 EventB
Producer2 生产 EventA

我看到有两个选项:
选项 1 - MPSC 队列
Producer1 将 EventA 推送到 Q1
Producer1将EventB推送到Q1
Producer2将EventA推送到Q1
Consumer1线程循环消费Q1。

选项 2 - 多个 SPSC 队列和单个消费者
Producer1 将 EventA 推送到 Q1
Producer1将EventB推送到Q2
Producer2 将 EventA 推送到 Q3 Consumer1线程循环消费Q1、Q2、Q3。

希望清楚...

就性能而言,您认为哪个选项更好?

提前致谢..

最佳答案

在性能方面选项 2 更好。

原因是,您可以使用无锁循环队列,这样生产者就不会与消费者争用。由于所有生产者现在都在写入单独的队列。根本没有争论。 将此与选项 1 进行比较,其中所有生产者都必须竞争锁定 q1。

除了性能,事件处理的顺序是否重要?我想不是。如果是,那么您需要在选择解决方案时考虑这些因素

关于c++ - 哪个是更好的架构?多个 SPSC 队列还是一个 MPSC 队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49384430/

相关文章:

c++ - C、C++ 中的内存泄漏;忘记免费了,删除

ios - 如何让 subview 在添加后立即出现在 UI 中?

java - 同步代码块

performance - 什么是数据的低延迟访问?

language-agnostic - 低延迟编程

c++ - 在 C++ 中有可能什么都不抛出吗?

c++ - C++ 类的预先定义

c++ - lambda capture 是否支持可变模板参数

c# - 报告线程进度的最佳方式

c# - 调用 Socket.Receive 时防止线程休眠