2016-08-03 37 views
3

Kann ein einzelner Prozess verschiedene Threads auf verschiedenen Kernen ausführen?Kann ein einzelner Prozess in mehreren Kernen ausgeführt werden?

(ich glaube, sie können)

In diesem Fall verschiedene Kerne den gleichen Adressraum teilen, aber mit verschiedenen Caches? Bedeutet das, dass Caches überflüssig sind?

Danke!

+1

Ein einzelner Prozess kann mehrere Threads enthalten, ja. – Phoenix

+0

Können sie geplant werden, um auf irgendeinem Kern zu laufen? Wenn ein Prozess auf eine CPU geladen wird, verstehe ich, dass der Inhalt der Register gewechselt wird; Wie funktioniert das mit mehreren CPUs? –

+2

Überprüfen Sie http://programmers.stackexchange.com/questions/181157/how-to-program-thread-allocation-on-multicore-processors – Rupsingh

Antwort

4

Ja, ein einzelner Prozess kann mehrere Threads auf verschiedenen Kernen ausführen.

Caching ist spezifisch für die Hardware. Viele moderne Intel-Prozessoren verfügen über drei Cachespeicher, wobei der Cache der letzten Ebene über mehrere Kerne verteilt ist.

Es bedeutet nicht, dass die nicht gemeinsam genutzten Caches redundant sind, aber es hat Auswirkungen auf Multicore-Leistung. Insbesondere wenn ein Kern einen Wert in dem Adressraum aktualisiert, der gegenwärtig im privaten Cache eines anderen Kerns lebt, muss ein Cache-Kohärenzprotokoll ausgeführt werden, um sicherzustellen, dass ein anderer Kern einen veralteten Wert nicht mehr lesen kann.

0

Ein einzelner Prozess kann Threads gleichzeitig auf mehreren Prozessoren ausführen, wenn das zugrundeliegende System Threads (und nicht Prozesse) zur Ausführung plant (auch als Kernel-Threads bezeichnet). Dies ist die Art und Weise, wie Threads heutzutage auf den meisten Systemen implementiert sind (z. B. Windoze, Linux).

Es gibt jedoch noch einige Systeme, die Prozesse zur Ausführung einplanen. Auf solchen Systemen werden Threads von einer Bibliothek (auch Benutzer-Threads genannt) geplant. Mit anderen Worten plant der Prozess seine eigenen Threads zur Ausführung. Auf diesen Systemen werden die Threads für den Prozess auf demselben Prozessor ausgeführt.