-1

OSX (10.8.x) で実行されている、32 のライブ オーディオ ストリームを取り込み、エンコード/圧縮し、ネットワーク経由で送信するアプリケーションがあります。プロファイリングでは、ほとんどの CPU 時間がコンプレッサー/エンコーダー機能に費やされていることが示され、アクティビティ モニターでは約 40% の CPU 使用率が示されます。アプリケーションはシングル スレッドで問題なく動作しますが、1 つのプロセッサ コアをかなり占有するだけです。

楽しみのために、マルチコア処理を利用するために多数の同時ディスパッチ キューを実装し、現在はほとんどのエンコーディングを並列処理しています。アクティビティ モニターは、CPU 全体にかなり均等に分散されていることを示していますが、もちろん、全体の CPU 容量の同じパーセンテージをまだ使用しています (実際には、GCD オーバーヘッドのためにわずかに多くなっています)。

唯一の本当の利点は、マルチスレッドの場合のオーディオ パケットがシングル スレッドの場合よりも約 4 ミリ秒早く送信されることですが、これはシステム全体のパフォーマンスにとって大きな問題ではありません。

問題は次のとおりです。アプリケーションが「問題なく」シングル スレッドで実行されるという事実を考えると、1 つのプロセッサを占有しないことには他に利点がありますか? 4 コアのプロセッサがあると仮定すると、1 つのコアの 40% を使用するのと、4 つのコアの 10% を使用するのとではどちらが良いですか? 数学は、これは同じだと言うでしょう。

または、私は何もないのに自分を打ち負かしていますか?

ありがとう、

チャック

4

1 に答える 1

2

1 つのコアの使用率が 100% 未満である限り、マルチスレッド化するメリットはあまりありません。

OTOH さん、すべてのユーザーがあなたの Mac と同じくらい高速な Mac を持っているわけではありません。シングルスレッドが 100% でコアを固定する遅い (まだマルチコアの) Mac でプログラムが実行される場合、その Mac ではマルチスレッド化によって速度が向上します。

于 2013-10-17T16:26:16.753 に答える