【发布时间】:2021-07-18 15:49:44
【问题描述】:
我已经使用 Qt 线程实现了生产者/消费者模式。多个生产者线程生成由消费者组合的数据。使用信号/插槽和排队连接来实现通信。只要消费者能够比生产者线程产生数据的速度更快地消费数据,这就可以正常工作。
我的代码很难扩展。特别是增加生产者的数量很容易,但很难产生多个消费者线程。
现在,当在具有大量内核的 CPU/系统上运行软件时,问题就开始了。在这种情况下,我使用更多线程来生成数据。有时可能会发生(取决于数据生成的复杂性)消费者无法及时处理生成的数据。然后 Qt 事件队列中的事件迅速填满,内存消耗急剧增加。
我可以通过使用阻塞队列连接来解决这个问题。然而,这并不允许 CPU 满负荷,因为生产者倾向于在每次数据发射后不必要地等待消费者。
在非 Qt 软件中,我将使用具有固定大小的队列/邮箱/环形缓冲区,使生产者休眠,直到消费者释放该容器中的空间。这种机制限制了内存消耗并允许最佳的 CPU 负载。
但是我找不到使用 Qt 类的等效解决方案。事件队列是全局的,没有大小属性。有没有一种 Qt 方法可以最佳地解决这个问题?如果没有,我可以使用 STL 类来以我的方式耦合 (Q) 线程吗?
【问题讨论】:
标签: c++ multithreading qt queue producer-consumer