9

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

3 ответа3

14

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

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

6

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

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

 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. В настоящее время все ОС поддерживают его.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .