Планирование потоков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