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)?
quelle
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)?
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.
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.
Kurze Antwort:
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.