基于Qt的CD开膛手的线程构建模块(TBB)?

Jas*_*ele 5 c++ concurrency qt multithreading tbb

我正在用C++和Qt构建一个CD ripper应用程序.我想并行化应用程序,以便可以同时编码多个轨道.因此,我以这样的方式构建应用程序,即对轨道进行编码是一个"任务",我正在研究一种机制来同时运行一些这些任务.当然,我可以使用线程完成此任务并编写自己的任务队列或工作管理器,但我认为英特尔的线程构建模块(TBB)可能是一个更好的工具.不过,我有几个问题.

  1. 是否将WAV文件编码为FLAC,Ogg Vorbis或Mp3文件,这些文件可以作为tbb :: task运行良好?教程文档指出"如果线程频繁阻塞,则在使用任务调度程序时会出现性能损失".我认为我的编码任务不会经常阻塞互斥锁,但需要相对频繁地访问磁盘,因为它们必须从磁盘读取WAV数据才能进行编码.在本教程描述的意义上,这种级别的磁盘活动是否有问题?
  2. TBB是否与Qt配合良好?使用Qt线程时,可以跨线程透明地使用Qt的信号/插槽机制.如果我使用tbb :: tasks而不是Qt线程,是否也是如此?会不会有其他"陷阱"?

感谢您提供的任何见解.

Duc*_*uck 1

TBB 应该与其他线程机制一起工作得很好,甚至是透明的,所以理论上应该没有什么可以阻止您在同一程序中使用 QT 的线程类。如果有一些东西可以更自然地与 QT 线程一起工作,例如 GUI,请使用它们并尽可能或想要地隔离 TBB 内容。

我认为您没有充分利用 TBB,因为您目前概述了您的设计。您可以在最粗略的层面上并行化文件。正如您所怀疑的,由于 CD 是一种速度相当慢的设备,因此您可能会花费更多的时间从多个文件中来回查找数据,而不是实际保存的时间。

TBB 的真正效益应该涉及利用转换过程中存在的任何数据和/或任务并行性。例如,您可以从流中提取任何字节块并独立于流之前或之后的任何部分对其应用任何转换吗?是否有多个可以并行的转换步骤?