4

C# 2.0 経由で CLR を読み取る (現時点では 3.0 を持っていません)

これはまだですか:

コンピューターに CPU が 1 つしかない場合、一度に実行できるスレッドは 1 つだけです。Windows は、スレッド オブジェクトを追跡する必要があり、Windows は、次に CPU に行くためにどのスレッドをスケジュールするかを決定する必要があります。これは、20 ミリ秒ごとに実行する必要がある追加のコードです。Windows が CPU に 1 つのスレッドのコードの実行を停止させ、別のスレッドのコードの実行を開始させるとき、これをコンテキスト スイッチと呼びます。コンテキスト スイッチは、オペレーティング システムが次のことを行う必要があるため、かなりコストがかかります。

したがって、C# 2.0 経由の CLR については、Pentium 4 2.4 GHz 1 コア、非 HT、XP を使用しているとします。20ミリ秒ごと?CLR スレッドまたは Java スレッドが OS スレッドにマップされている場合、1 秒あたり最大 50 スレッドしか実行できない可能性がありますか?

ここSOではコンテキスト切り替えがミリ秒単位で非常に高速であると読んだことがありますが、5年ほど前のサーバーWindows 2003 Pentium XeonシングルコアがOSにコンテキスト切り替えの機会を与える頻度はどれくらいですか? 右の領域で 20 ミリ秒?

正確な数値は必要ありませんが、それが適切な領域にあることを確認したいだけです。私にはかなり長いようです。

4

3 に答える 3

3

Quantum と呼ばれているものは、オペレーティング システムが進行するにつれて行うパフォーマンスの調整など、いくつかの要素に依存しています。たとえば、フォアグラウンド プロセスにはより高い優先度が与えられ、[デフォルトよりも 3 倍長いクォンタムを与えることができます。サーバー SKU とクライアント SKU の間にも違いがあります。通常、クライアントの既定のクォンタムは 30 ミリ秒で、サーバーは 180 ミリ秒です。

そのため、可能な限り多くの CPU を必要とするフォアグラウンド プロセスは、コンテキスト スイッチの前に 90 ミリ秒のクォンタムを取得する可能性があります。その後、OS は切り替える必要がないと判断し、クォンタムを続行させます。

于 2011-06-08T09:55:03.730 に答える
2

「一度に 50 スレッド」という計算は間違っています。これらのスレッドのそれぞれが 100% の CPU 状態にあると想定します。実際、ほとんどのスレッドは、IO やその他のイベントを待ってスリープ状態になっています。それでも、ほとんどのスレッドは 20 ミリ秒全体を使用してから IO モードに移行したり、スライスを放棄したりしません。

これを試して。無限ループ (CPU ウィンドウ全体を消費する) でアプリを作成します。それを 50 回実行します。Windows がどのように反応するかを確認してください。

于 2010-05-20T15:43:08.667 に答える
0

私はちょうど43スレッドを取得したテストを実行しました。これにより、(ウォーミングアップ後)1秒でシェアが確認され、Richterステートメントが(オーバーヘッドを使用して)かなり正確になります。Quadcore / Win7/64ビット。はい、これらは100%CPUスレッドであったため、明らかに20ミリ秒前に返されることはありませんでした。面白い

于 2010-05-20T15:47:39.503 に答える