(プログラミングC#高度から抜粋バージョン7)スレッドプール

1、需要の背景
  スレッドを作成して時間がかかります。別の小さなタスクが完了しているがある場合は、これらのタスクを完了する必要があり、要求で、事前に多くのスレッドを作成することができます。これは、あなたがより多くのスレッドを必要とするとき、スレッドの数がリソースを解放するために必要な時間を短縮、最高で増加します。
 
2、スレッドプール出演
  そのようなリスト自分自身を作成する必要はありません。このリストは、ThreadPoolクラスによってホストされています。必要なときにこのクラスは、スレッドの最大数まで、スレッドプール内のスレッドの数を増減します。プール内のスレッドの最大数は設定可能です。
  デュアルコアCPUでは、デフォルト設定は1023件のワーカースレッド1000 I / Oスレッドです。クアッドコアCPU、デフォルト設定は2047ワーカースレッド1000 I / Oスレッドです。
  あなたもすぐに開始するために作成する必要があるスレッドプール内のスレッドの最小数、および使用可能なスレッドプール内のスレッドの最大数を指定することができます。
  処理すべきジョブ、スレッドプールのスレッドの数が制限にある場合は、新しいジョブはキューに入れますと、そのタスクを完了するためのスレッドを待たなければなりません。
 
栗3.
  以下の実施例は、私が第1動作とスレッドのスレッド/ Oスレッドの最大数を読み取り、コンソールに情報を書き込み、その後、forループで、ThreadPool.QueueUserWorkItem呼び出し()メソッド、WaitCallBackデリゲート型、JobForAThreadを通過(スレッドプールのスレッドを付与する)方法。スレッドプールは、この要求を受信した後、それがメソッドを呼び出すために、プールからスレッドを選択します。
  スレッドプールがすでに実行されていない場合は、スレッドプールを作成し、最初のスレッドを開始します。スレッドプールがすでに実行されている、およびタスクを完了するための空きスレッドがある場合は、タスクはこのスレッドを入れて渡されました。
クラスCLRThread2 
    { 
        公共 静的 ボイドThreadMethod()
        { 
            int型nWorkThreads。
            int型nCompletionPortThreadsを。
            (ThreadPool.GetMaxThreads アウト nWorkThreads、アウトnCompletionPortThreads)。
            Console.WriteLineを(" 最大ワーカースレッド:{0}、I / O完了スレッド:{1} " 、nWorkThreads、nCompletionPortThreads)。
 
            以下のためにint型 i = 0 ; iは< 5 ; iは++ 
            { 
                ThreadPool.QueueUserWorkItem(JobForAThread)。 
            } 
            のThread.sleep(3000 )。
 
        } 
 
        静的 ボイド JobForAThread(オブジェクトの状態)
        { 
            ためint型 i = 0 ; iは< 3 ; iは++ 
            { 
                Console.WriteLineを(" ループ{0}、内部プールスレッドを実行{1} " 、I、Thread.CurrentThread.ManagedThreadId) ; 
                Thread.sleep(50 )。
            } 
        } 
    }

 

 
 
図4に示すように、スレッドプールの制限を使用して
  スレッドプールは簡単に聞こえるが、それはいくつかの制限があります。
  • プール内のすべてのスレッドは、バックグラウンドスレッドです。すべての上のプロセスのすべてのフォアグラウンドスレッド場合は、すべてのバックグラウンドスレッドが停止します。代わりに、フォアグラウンドスレッドプールのスレッドに入れることができません。
  • あなたは、プールされたスレッドに優先順位や名前を設定することはできません
  • COMオブジェクトの場合、すべてのスレッドがマルチスレッド・ユニット(multitihreadedアパート、MTA)スレッドプールします。多くのオブジェクトがシングルスレッドCOMユニットを必要とする(シングルスレッドapartmeng、STA)スレッド
  • 短時間の作業のためにのみ使用されるスレッドのプールに。スレッドが(例えばWordのスペルチェックのスレッドとして)実行することがある場合は、スレッドを作成するために、Threadクラスを使用する必要があります。

おすすめ

転載: www.cnblogs.com/schangxiang/p/11292949.html