Kann ein Multi-Core-Prozessor mehrere Prozesse gleichzeitig ausführen?

9

Ich verstehe, dass ein Multi-Core-Prozessor mehrere Threads desselben Prozesses gleichzeitig mit seinen verschiedenen Kernen ausführen kann.
Kann es auch mehrere Prozesse gleichzeitig ausführen (jeder Kern führt einen anderen Prozess aus)?

NimsDotNet
quelle

Antworten:

14

In Bezug auf das Betriebssystem und die Anwendungen ist jeder Kern ein separater Prozessor und unterliegt denselben Affinitätsregeln wie mehrere Prozessoren.

Auf welchem ​​Prozessor (real, Core oder Hyperthread) ein Prozess ausgeführt wird, hängt vollständig vom Planungssystem des Betriebssystems ab. Dieses Planungssystem (beeinflusst von den Affinitätseinstellungen ) entscheidet, wo und wann ein Prozess ausgeführt werden soll. Prozesse und Threads können nach Belieben zwischen Prozessoren und Kernen wechseln, wie es der Scheduler für richtig hält.

Majenko
quelle
7

Aufgrund meiner begrenzten Kenntnisse über Betriebssysteme glaube ich, dass jeder Prozess mindestens einen Thread hat, und es sind diese Threads, die geplant werden, nicht die Prozesse selbst. Der Prozess enthält lediglich Informationen über das Programm und die von ihm festgelegten Threads. Auf diese Weise wird eine Single-Threaded-Anwendung genauso behandelt wie eine Multithread-Anwendung, aber die Multithread-Anwendung kann Ressourcen besser nutzen.

Nehmen wir zum Beispiel an, wir haben zwei Prozesse mit jeweils zwei Threads und eine einzelne Thread-Anwendung, die alle hart an einem Dual-Core-Prozessor arbeiten (oder einer Dual-CPU, macht hier keinen Unterschied).

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

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

 Process C
    |_Thread C

Jeder Thread kann über alle Kerne der CPU hinweg geplant werden, und die Last wird vom OS-Scheduler ausgeglichen.

Wenn wir dann die Prozessoraffinität für Prozess B einrichten, um sie auf eine CPU zu beschränken, sind alle Threads dieses Prozesses ebenfalls an diese CPU gebunden und werden auf keiner anderen CPU ausgeführt. Wenn Sie dasselbe für Prozess C tun, ändert sich nichts wirklich, da es jeweils nur auf einer CPU ausgeführt werden kann.

Mokubai
quelle
2

Kurze Antwort:

  1. Ja, sofern das Betriebssystem dies unterstützt.
  2. Heutzutage unterstützen es alle Betriebssysteme.

Prozesse und Threads (wie beim Multithreading) sind Konstrukte auf Betriebssystemebene. Sobald Sie in der Zeitplanung niedrig genug sind, verschwinden diese und Sie haben nur eine Reihe von Threads für die Ausführungswarteschlange, um die Ausführungszeit zu erhalten.

Herr Alpha
quelle