Планирование потоков

Каждому потоку назначается определенный приоритет. Потокам, созданным в общеязыковой среде выполнения, изначально назначается приоритет ThreadPriority.Normal. Потоки, созданные за пределами среды выполнения, сохраняют приоритет, который они имели до входа в управляемую среду. Вы можете получить или задать приоритет для любого потока, используя свойство Thread.Priority.

Потоки назначаются на выполнение с учетом их приоритетов. Несмотря на то, что потоки выполняются в среде выполнения, процессорное время им выделяет операционная система. Конкретный алгоритм планирования, который определяет порядок выполнения потоков, будет разным у каждой операционной системы. В некоторых операционных системах первым всегда выполняется поток с наивысшим приоритетом (из числа тех потоков, которые готовы к выполнению). Если доступны несколько потоков с одинаковым приоритетом, планировщик поочередно запускает все потоки с этим приоритетом, выделяя каждому фиксированное время для выполнения. Пока есть хоть один доступный для выполнения поток с более высоким приоритетом, ни один из потоков с более низким приоритетом не запускается. Когда не останется ни одного готового потока с этим приоритетом, планировщик назначает для выполнения потоки со следующим, более низким, приоритетом. Если в любой момент будет готов поток с более высоким приоритетом, поток с низким приоритетом сразу же прерывается и вместо него снова запускается поток с более высоким приоритетом. Кроме того, операционная система может динамически изменять приоритеты потоков при перемещении пользовательского интерфейса приложения на передний план или в фоновый режим. Другие операционные системы могут использовать другой алгоритм планирования.

См. также