Может ли ОС менять ядро на котором выполняется поток?

Рейтинг: 3Ответов: 2Опубликовано: 21.02.2023

Представим, что я написал программу на python и использую многопоточность. Изначально мой поток ОС расположила на каком-то ядре, может ли она в будущем, при переключении потоков или освобождении ресурсов, поменять ядро на котором находится поток?

Ответы

▲ 3Принят

Всё верно, операционная система может переместить поток на другое ядро в процессе выполнения программы. Это происходит если система понимает что другое ядро менее загружено и/или сможет выполнить там операцию быстрее. Операционная система управляет планированием потоков и принимает решения какой поток выполнится на каком ядре в каждый момент времени.

▲ 4

Да, может менять и делает это, но этот процесс на многих ОС можно ограничить с помощью такой штуки как Processor affinity.

Processor affinity, or CPU pinning or "cache affinity", enables the binding and unbinding of a process or a thread to a central processing unit (CPU) or a range of CPUs, so that the process or thread will execute only on the designated CPU or CPUs rather than any CPU. This can be viewed as a modification of the native central queue scheduling algorithm in a symmetric multiprocessing operating system. Each item in the queue has a tag indicating its kin processor. At the time of resource allocation, each task is allocated to its kin processor in preference to others.

В данном случае под CPU имеются в виду ядра процессора. Я помню во времена игры в старый ещё Counter Strike некоторые в винде делали ему привязку к конкретному ядру процессора, так вроде бы меньше были лаги в теории.