Может ли многоядерный процессор запускать несколько процессов одновременно?

9

Я понимаю, что многоядерный процессор может одновременно запускать несколько потоков одного и того же процесса, используя разные ядра.
Может ли он также запускать несколько процессов одновременно (на каждом ядре выполняется отдельный процесс)?

NimsDotNet
источник

Ответы:

14

Что касается операционной системы и приложения обеспокоены каждое ядро представляет собой отдельный процессор и подчиняется тем же сродство правил, имеющие несколько процессоров.

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

Majenko
источник
7

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

Например, давайте предположим, что у нас есть два процесса с двумя потоками в каждом и однопоточное приложение, и все они усердно работают на двухъядерном процессоре (или двухъядерном процессоре, здесь нет никакой разницы)

 Process A
    |_Thread A-1
    |_Thread A-2

 Process B
    |_Thread B-1
    |_Thread B-2

 Process C
    |_Thread C

Каждый поток планируется по всем ядрам ЦП, а загрузка балансируется планировщиком ОС.

Если затем мы установим привязку к процессору для процесса B, чтобы ограничить его одним процессором, то все потоки этого процесса также будут связаны с этим процессором и не будут работать ни на одном другом процессоре. То же самое в отношении процесса C не приведет к каким-либо реальным изменениям, поскольку он может одновременно работать только на одном процессоре.

Мокубай
источник
2

Короткий ответ:

  1. Да, если ОС поддерживает это.
  2. В настоящее время все ОС поддерживают его.

Процессы и потоки (как в многопоточности) являются конструкциями уровня ОС. Как только вы получите достаточно низкий уровень в расписании, они исчезнут, и у вас будет только куча потоков выполнения, чтобы получить время выполнения.

Мистер альфа
источник