スレッドのスケジューリングScheduling threads

すべてのスレッドには、スレッド優先順位が割り当てられます。Every thread has a thread priority assigned to it. 共通言語ランタイム内で作成されたスレッドには、初期状態で ThreadPriority.Normal の優先順位が割り当てられます。Threads created within the common language runtime are initially assigned the priority of ThreadPriority.Normal. ランタイムの外部で作成されたスレッドは、マネージド環境に入る前に設定されていた優先順位を維持します。Threads created outside the runtime retain the priority they had before they entered the managed environment. 任意のスレッドの優先順位を取得または設定するには、Thread.Priority プロパティを使用します。You can get or set the priority of any thread with the Thread.Priority property.

スレッドの実行は、優先順位に基づいてスケジュールされます。Threads are scheduled for execution based on their priority. スレッドがランタイム内で実行されている場合でも、オペレーティング システムは、すべてのスレッドにプロセッサ タイム スライスを割り当てます。Even though threads are executing within the runtime, all threads are assigned processor time slices by the operating system. スレッドの実行順序を決定するために使用されるスケジューリング アルゴリズムの詳細は、オペレーティング システムによって異なります。The details of the scheduling algorithm used to determine the order in which threads are executed varies with each operating system. オペレーティング システムによっては、実行可能なスレッドの中で最も優先順位の高いスレッドが常に最初に実行されるようにスケジュールされます。Under some operating systems, the thread with the highest priority (of those threads that can be executed) is always scheduled to run first. 同じ優先順位を持つ複数のスレッドがすべて実行可能である場合、スケジューラは、その優先順位にあるスレッド間を循環することで各スレッドに一定の実行用タイム スライスを与えます。If multiple threads with the same priority are all available, the scheduler cycles through the threads at that priority, giving each thread a fixed time slice in which to execute. より優先順位の高いスレッドが実行可能である限り、それよりも優先順位の低いスレッドは実行されません。As long as a thread with a higher priority is available to run, lower priority threads do not get to execute. 特定の優先順位を持つ実行可能なスレッドがなくなると、スケジューラは次に低い優先順位に移り、その優先順位にあるスレッドの実行をスケジュールします。When there are no more runnable threads at a given priority, the scheduler moves to the next lower priority and schedules the threads at that priority for execution. より優先順位の高いスレッドが実行可能になった場合も、それよりも優先順位の低いスレッドの代わりに優先順位の高いスレッドが実行されます。If a higher priority thread becomes runnable, the lower priority thread is preempted and the higher priority thread is allowed to execute once again. また、オペレーティング システムは、アプリケーションのユーザー インターフェイスをフォアグラウンドとバックグラウンド間で移動させながら、スレッドの優先順位を動的に調整することもできます。On top of all that, the operating system can also adjust thread priorities dynamically as an application's user interface is moved between foreground and background. オペレーティング システムによっては、別のスケジューリング アルゴリズムが使用される場合があります。Other operating systems might choose to use a different scheduling algorithm.

関連項目See also