我正在用 C++ 和 Qt 构建一个 CD 开膛手应用程序。我想并行化应用程序,以便可以同时编码多个轨道。因此,我以这样一种方式构建应用程序,即编码轨道是一个“任务”,并且我正在研究一种机制来同时运行一些这些任务。当然,我可以使用线程来完成此任务并编写自己的任务队列或工作管理器,但我认为英特尔的线程构建块 (TBB) 可能是完成这项工作的更好工具。不过,我有几个问题。
- 将 WAV 文件编码为 FLAC、Ogg Vorbis 或 Mp3 文件是否可以作为 tbb::task 很好地工作?教程文档指出“如果线程频繁阻塞,使用任务调度程序时会出现性能损失”。我不认为我的编码任务会经常阻塞互斥锁,但是需要相对频繁地访问磁盘,因为它们必须从磁盘读取 WAV 数据才能进行编码。在本教程描述的意义上,这种级别的磁盘活动是否存在问题?
- TBB 是否与 Qt 配合得很好?使用 Qt 线程时,您可以跨线程透明地使用 Qt 的信号/槽机制。如果我使用 tbb::tasks 而不是 Qt 线程,情况也会如此吗?还会有其他“陷阱”吗?
感谢您提供的任何见解。