0

parallel_for_each を処理するスレッドのスレッド優先度を下げたいと考えています。これは、負荷が高い状況では、システム内の他のスレッドに比べてプロセッサ時間を消費しすぎるためです。

質問:

1) parallel_for_each のサービス スレッドは、呼び出しスレッドのスレッド優先度を継承しますか? この場合、おそらく、parallel_for_each の前後で SetThreadPriority を呼び出すことができ、すべて問題ないはずです。

2) または、parallel_for_each 内で SetThreadPriority を呼び出すことをお勧めしますか? これにより、同じスレッドに対して API が複数回呼び出されることは明らかです。これを行うには大きなオーバーヘッドがありますか?

2.b) これを行うと仮定すると、次に parallel_for_each が呼び出されたときにスレッドの優先度に影響しますか?つまり、後で各スレッドの優先度を何らかの方法でリセットする必要がありますか?

3) 一般的なスレッドの優先順位について疑問に思っています。コメントしたい人はいますか:単一のプロセッサをめぐって競合する2つのスレッドがあり、1つは「通常以下」に設定され、もう1つは「通常」の優先度であると仮定します。一方のスレッドは、他方のスレッドと比較して、およそ何パーセント多くのプロセッサ時間を取得できますか?

4

1 に答える 1

1
  1. すべてのスレッドは、最初は から始まりTHREAD_PRIORITY_NORMALます。したがって、各スレッドの優先度を下げる必要があります。または、所有しているプロセスの優先度を下げてください。

  2. を呼び出す際のオーバーヘッドはほとんどありませんSetThreadPriority。スレッドを起動すると、呼び出しの追加コストSetThreadPriorityはごくわずかです。スレッドの優先度を設定すると、変更されるまでその値が維持されます。

  3. 1 つのプロセッサと 2 つのスレッドを実行する準備ができているとします。スケジューラは常に、優先度の高いスレッドを実行することを選択します。これは、シナリオでは、以下の通常のスレッドが実行されないことを意味します。実際には、スケジューリングにはそれ以外にも多くの作業があります。たとえば、優先順位の逆転。ただし、次のように考えることができます。すべてのプロセッサが通常の優先度のスレッドでビジー状態になっている場合は、優先度の低いスレッドの CPU が枯渇することが予想されます。

于 2012-09-10T17:00:37.770 に答える