用于Qt的线程构建块(TBB)

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

  • 将WAV文件编码为FLAC,Ogg Vorbis或Mp3文件,这些文件可以很好地用作tbb :: task? 本教程文档指出,“如果线程频繁阻塞,则在使用任务调度程序时会出现性能损失”。 我不认为我的编码任务经常会阻塞互斥锁,但是需要相对频繁地访问磁盘,因为他们必须从磁盘读取WAV数据才能进行编码。 本教程描述的这种磁盘活动级别是否存在问题?
  • TBB能否与Qt合作? 当使用Qt线程时,您可以在线程间透明地使用Qt的信号/插槽机制。 如果我使用tbb :: tasks而不是Qt线程,情况会如此吗? 会不会有其他“陷阱”?
  • 感谢您提供的任何见解。


    TBB假设其他线程机制能够很好地工作,甚至是透明地工作,所以理论上应该没有什么能够阻止你在同一个程序中使用QT的线程类。 如果有什么东西与QT线程(例如GUI)更自然地一起工作,请使用它们,并尽可能将TBB的东西隔离开来。

    正如您目前概述您的设计,我没有看到您正在充分利用TBB。 你在最好的层面上并行化文件。 正如你怀疑的那样,由于CD是一个非常慢的设备,你可能会花更多的时间来回复多个文件中的数据,而不是实际存储。

    对于TBB来说,真正的压力应该包括利用转换过程中的任何数据和/或任务并行性。 例如,你能否将任何字节块从流中提取出来,并在其之前或之后独立于流的任何部分对其应用任何变换? 是否有多个可以并行化的转换步骤?


    为什么不使用Qt并发?

    链接地址: http://www.djcxy.com/p/64509.html

    上一篇: Threading Building Blocks (TBB) for Qt

    下一篇: How many threads is too many?