Переключаются ли процессы между разными ядрами?

Переключаются ли процессы между разными ядрами?

Будет ли процесс переключаться между разными ядрами для повышения производительности? Если процесс переключается между ядрами, какие компоненты являются общими для всех ядер? Кэш L1-L3, регистры или память?

решение1

Представим себе загруженную систему с одним ЦП и двумя ядрами, где загрузка приближается к 100%.

Процесс с PID 1234 имеет только один поток (например, консольное приложение, выполняющее однопоточное сжатие звука).

Для такого рода процесса система будет стараться запускать поток на том же ядре, чтобы минимизировать сбои кэша. Однако, если система действительно занята, другие похожие процессы также могут попытаться запуститься на тех же ядрах. В этом случае, в принципе, ваш однопоточный процесс может сначала запуститься на ядре № 1, затем на ядре № 2 и так далее и тому подобное.

решение2

Будет ли Process переключаться между разными ядрами для повышения производительности?

Это зависит от того, является ли процесс многопоточным или нет. Сам процесс по сути является просто «контейнером» для потоков, ему нужно иметь по крайней мере один для запуска. Каждый поток может использовать ядро ​​ЦП, поэтому если у вашего процесса есть 2 потока (GUI- и рабочий поток), он будет работать на 2 ядрах ЦП.

Вопрос «будет ли процесс переключаться между разными ядрами» не совсем корректен, поскольку такое переключение планируется операционной системой (ОС), а НЕ самим процессом!

решение3

Переключение процессов между ЦП снизит производительность, поскольку переключение будет означать сохранение информации о процессе и регистрах в памяти, а затем загрузку ее на другой ЦП.

Эти команды сохранения и загрузки являются одними из самых медленных команд ЦП, хотя они и не будут заметны, если выполняются очень редко.

Этот процесс точно такой же, как когда процесс завершает свой временной интервал и приостанавливается операционной системой, а затем перезапускается с новым временным интервалом.

Связанный контент