0

多くのタスクを作成するプログラムを作成しています。通常、タスクの数は 10,000 ~ 50,000 です。プログラムが使用するロックの量は非常に少なく、約 800,000 分の 1 であるため、スレッドが相互にブロックされている可能性はほとんどありません。ただし、CPU 使用率はまだ 70% しかありません。これについて 2 つの質問があります。

  • 50k は過剰な量のタスクですか?
  • CPU 使用率は 100% である必要がありますか? それとも、このシナリオでは 70% が正常ですか? そうでない場合は、ロックをもう一度調べる必要があります。

多くのタスクを作成するプログラムを作成しています。通常、タスクの数は 10,000 ~ 50,000 です。プログラムが使用するロックの量は非常に少なく、約 800,000 分の 1 であるため、スレッドが相互にブロックされている可能性はほとんどありません。ただし、CPU 使用率はまだ 70% しかありません。これについて 2 つの質問があります。

  • 50k は過剰な量のタスクですか?
  • CPU 使用率は 100% である必要がありますか? それとも、このシナリオでは 70% が正常ですか? そうでない場合は、ロックをもう一度調べる必要があります。

タスク情報

タスクは、息優先検索アルゴリズムに使用されます。1 つのタスクは、このタスクに固有のノードのハッシュを計算します。次に、このハッシュを使用してハッシュ テーブルでノードを検索します。ハッシュは非常に高速です。通常、ルックアップもかなり高速です。

4

1 に答える 1

2

アクティブなスレッドが多すぎるため、正確に CPU 使用率が高くなっていません。スレッドがその CPU タイム スライスを使い果たし、別のスレッドが CPU で何かを実行する道を譲ると、「コンテキスト スイッチング」と呼ばれる何かが発生します。これは基本的に、譲歩スレッドの現在の状態 (たとえば、そのスタック) を保存し、2 番目のスレッドの状態を復元します。これはかなりコストのかかる操作であり、何の役にも立たないことに時間を費やしています。これが理由かもしれません

于 2013-11-09T16:54:07.100 に答える