1

データを受信して​​計算するudpサーバーがあります。

役割ごとに 2 つのスレッドがあります。

私のCPUには8つのマルチコアがあり、さまざまな速度でデータを送信しています。

しかし、最大で、CPU 2 コア 50% の 14% しか使用していません。より多くのデータ値を送信すると、バッファーがいっぱいになり、CPU を使用しなくなります。

なぜ各コアは 50% しか発生せず、それ以上ではないのですか?

この2つの役割をマルチコアに分けようと思います。

それぞれが他のコアにあることを確認したい。

他のコアで実行される各スレッドを明示的に選択するにはどうすればよいですか?

私のプログラムはc ++ Visaul Studio 9で動作し、windows7で実行され、boost::threadを使用しています。

4

4 に答える 4

4

スケジューラーは、スレッドなどが実行される場所を処理します。これはOS固有であるため、コードの実行方法を変更する場合は、スレッドアフィニティなどを設定できるOS固有のAPIが必要になります。

また、アプリケーションがどのようなものであるか、その外観によってはクライアントサーバーに依存するため、完全にCPUにバインドされているわけではありません。合計でいくつのスレッドがありますか、役割ごとに2つ言及しますか?スレッドは1つのCPUでのみ実行できます。真に並行して実行できる作業単位を作成してみてください。そうすれば、理想的には異なるコアで、真に独立して実行できます。

OSは、全体像が良くなるため、通常、コードを適切に実行します。

于 2012-10-14T09:03:02.883 に答える
1

1つのスレッドに複数のコアを使用させることはできません。より良いCPU使用率を達成するには、プログラムを再設計してより多くのスレッドを作成し、OSにそれらをスケジュールさせる必要があります。スレッドを特定のコアに手動で制限する必要はありません。OSは、コアをスレッドに割り当てる方法を理解するのに非常に優れています。

あなたの場合、データコンピューティングタスクがCPUに負担をかける場合は、リクエストごとに新しいスレッドを生成するか、着信タスクを選択して処理するワーカースレッドプールを作成できます。これはアイデアの1つにすぎません。アプリケーションアーキテクチャとそれが解決しようとしている問題について詳しく知らずに言うのは難しいです。

于 2012-10-14T09:03:59.430 に答える
1

各スレッドでは、SetThreadAffinityMaskを使用して、スレッドを実行する CPU を選択できます。ただし、受信リクエストごとに新しいワーカー スレッドを作成することをお勧めします (また、スレッド プールを使用すると、パフォーマンスが大幅に向上します)。

于 2012-10-14T09:12:09.937 に答える
0

コンパイラとリンカーの設定でマルチスレッドが有効になっていることに注意してください。

また、ベスト プラクティスは、多くのスレッドを開始するのではなく、計算やダウンロードなどのキューに入れられた作業をある程度実行する長寿命のスレッドを開始することです。

于 2021-08-26T11:38:43.043 に答える