私はC++とQtでCDリッパーアプリケーションを構築しています。複数のトラックを同時にエンコードできるように、アプリケーションを並列化したいと思います。そのため、トラックのエンコードが「タスク」になるようにアプリケーションを構成し、これらのタスクのいくつかを同時に実行するメカニズムに取り組んでいます。もちろん、スレッドを使用してこれを実現し、独自のタスクキューまたはワークマネージャーを作成することもできますが、IntelのThreading Building Blocks(TBB)の方がこの作業に適したツールになると思いました。ただし、いくつか質問があります。
- WAVファイルをFLAC、Ogg Vorbis、またはMp3ファイルにエンコードすることは、tbb :: taskとしてうまく機能するものですか?チュートリアルドキュメントには、「スレッドが頻繁にブロックされると、タスクスケジューラを使用するとパフォーマンスが低下する」と記載されています。エンコードタスクがミューテックスを頻繁にブロックすることはないと思いますが、エンコードするためにディスクからWAVデータを読み取る必要があるため、ディスクに比較的頻繁にアクセスする必要があります。このレベルのディスクアクティビティは、チュートリアルで説明されている意味で問題がありますか?
- TBBはQtでうまく機能しますか?Qtスレッドを使用する場合、スレッド間で透過的にQtのシグナル/スロットメカニズムを使用できます。Qtスレッドの代わりにtbb::tasksを使用していた場合も、同じことが言えますか?他に「落とし穴」はありますか?
あなたが提供できる洞察に感謝します。