0

私が実装するとき

WaitCallback waitCB = new WaitCallback(DisplayTime);
for (int i = 1; i <= 5; i++)
{
  ThreadPool.QueueUserWorkItem(waitCB, null);
  Thread.Sleep(2000);
}


    public void DisplayTime(object state)
    {
        Console.WriteLine("Current Time {0} ", DateTime.Now);
    }

(1) 私のジョブが CLR のキューに入れられたということですか?

(2) CLR は、キュー内の既存の保留中のアイテムを終了した後にそれを処理しますか?

( 3 ) キュー内のアイテムを処理する時間は予測できませんか?

4

2 に答える 2

3

(1) 私のジョブが CLR のキューに入れられたということですか?

プールからのスレッドが利用可能になるとすぐに処理されるようにキューに入れられます

(2) CLR は、キュー内の既存の保留中のアイテムを終了した後にそれを処理しますか?

複数のジョブが同時に実行される可能性があります... プール スレッドの 1 つが利用可能になるとすぐに、キューから次のアイテムを処理するために使用されます

( 3 ) キュー内のアイテムを処理する時間は予測できませんか?

いいえ、少なくとも簡単ではありません...キューに入れられたジョブの実行にかかる時間を知り、各ジョブを追跡して、特定のジョブの実行時間を計算する必要があります。とにかくそれを知りたいのはなぜですか?

于 2009-09-24T12:51:52.270 に答える
2

コールバックは、CLR がそのプールからスレッドを割り当てて開始するために使用しているアルゴリズムに基づいて、スレッドプール スレッドで実行されます。

あなたの例では、コールバックはほぼ瞬時に、一見決定論的な方法で処理されます。ただし、スレッドプールの状態に応じて簡単に変更できます。プロセスがプール内のすべてのスレッドを使い果たした場合、別の場所のスレッドが完了して使用可能になるまで、コールバックは実行されません。

于 2009-09-24T12:48:35.087 に答える