OSX (10.8.x) で実行されている、32 のライブ オーディオ ストリームを取り込み、エンコード/圧縮し、ネットワーク経由で送信するアプリケーションがあります。プロファイリングでは、ほとんどの CPU 時間がコンプレッサー/エンコーダー機能に費やされていることが示され、アクティビティ モニターでは約 40% の CPU 使用率が示されます。アプリケーションはシングル スレッドで問題なく動作しますが、1 つのプロセッサ コアをかなり占有するだけです。
楽しみのために、マルチコア処理を利用するために多数の同時ディスパッチ キューを実装し、現在はほとんどのエンコーディングを並列処理しています。アクティビティ モニターは、CPU 全体にかなり均等に分散されていることを示していますが、もちろん、全体の CPU 容量の同じパーセンテージをまだ使用しています (実際には、GCD オーバーヘッドのためにわずかに多くなっています)。
唯一の本当の利点は、マルチスレッドの場合のオーディオ パケットがシングル スレッドの場合よりも約 4 ミリ秒早く送信されることですが、これはシステム全体のパフォーマンスにとって大きな問題ではありません。
問題は次のとおりです。アプリケーションが「問題なく」シングル スレッドで実行されるという事実を考えると、1 つのプロセッサを占有しないことには他に利点がありますか? 4 コアのプロセッサがあると仮定すると、1 つのコアの 40% を使用するのと、4 つのコアの 10% を使用するのとではどちらが良いですか? 数学は、これは同じだと言うでしょう。
または、私は何もないのに自分を打ち負かしていますか?
ありがとう、
チャック