Multithreading auf Dual-Core-Maschine?

7

Ich habe einen Dual-Core-Prozessor und der Erklärung zufolge kann ich nur zwei Threads verwenden, aber tatsächlich kann ich mehr als zwei Threads gleichzeitig starten:

Hier ist eine Kopie der Erklärung:

  

Die statische Methode hardware_concurrency (), die von   boost :: thread class, gibt die Anzahl der möglichen Threads zurück   physisch gleichzeitig ausgeführt werden, basierend auf der zugrunde liegenden Nummer   von CPUs oder CPU-Kernen. Aufruf dieser Funktion auf einem häufig verwendeten   Dual-Core-Maschine wird ein Wert von 2 zurückgegeben. Dies ermöglicht ein einfaches   Methode, um die theoretische maximale Anzahl von Threads zu identifizieren   sollte gleichzeitig von einer bestimmten Multithread-Anwendung verwendet werden.

hardware_concurrency () -Methode gibt in meinem Fall die Nummer 2 zurück, aber dieses Programm verwendet gleichzeitig vier Threads:

%Vor%

Kann jemand dieses Verhalten erklären?

    
codekiddy 10.01.2012, 20:01
quelle

5 Antworten

19

Der Begriff Threads umfasst normalerweise drei Abstraktionsschichten:

  1. Benutzerthreads sind Threads, die von Anwendungen gestartet werden und N: M zu:
  2. zugeordnet sind
  3. Kernel-Threads , bei denen es sich um Threads handelt, die vom Betriebssystem verwaltet werden, haben N: M zu:
  4. zugeordnet
  5. Hardware-Threads , die die tatsächlichen verfügbaren physischen Ressourcen darstellen.

Die von Ihnen angegebenen vier Threads werden von der Anwendung gestartet und stammen aus der Kategorie 1 (Benutzerthreads), während der von dieser Funktion zurückgegebene Wert 2 sich auf die Kategorie 3 (Hardware-Threads) bezieht. Da das Mapping N: M über die Ebenen hinweg ist, können Sie sehen, dass mehrere Benutzer-Threads einer kleineren Anzahl von Hardware-Threads zugeordnet werden können.

Wenn Sie dies tun, wird die Leistung durch Kontextwechsel und Ressourcenkonflikte in der Regel mehr als doppelt so hoch sein wie die Anzahl der Hardware-Threads, wenn Sie intensive Berechnungen durchführen.

    
Tudor 10.01.2012, 20:05
quelle
6

Sie können immer mehrere Threads ausführen, sogar auf einem einzelnen Core-Rechner. Sie können jedoch nicht parallel laufen. (mehr als 2 in deinem Fall)

Zum Beispiel, ein Thread führt die GUI aus, der andere holt etwas Arbeit vom Server ...

Siehe dies für eine tiefere Erklärung.

    
inf 10.01.2012 20:04
quelle
1

Sie können mehr Threads verwenden als Prozessorkerne. Dies kann mehrere Vorteile haben: Sie können die Kommunikation (z. B. Datei-I / O oder Netzwerk) durch Berechnung verbergen oder mehr Prozessorzeit in Zeitscheibensystemen erhalten. Bei zwei Kernen werden physisch nur zwei Threads zur gleichen Zeit ausgeführt, aber mit mehr Threads kann die Leistung gesteigert werden. Es ist etwas, was Sie tunen müssen.

    
Patrick87 10.01.2012 20:06
quelle
1

Es gibt einen Unterschied zwischen optimalen und möglichen Ergebnissen; es gibt auch einen Unterschied zwischen Threads, die gleichzeitig physisch und theoretisch ablaufen. In einem Dual-Core-Computer gibt es 2 CPUs, die zwei Threads gleichzeitig physisch ausführen können. Die Bedeutung eines Threading-Systems / einer Thread-Bibliothek besteht jedoch darin, dass Sie logisch so viele Threads erstellen können, wie Sie möchten. Diese Threads werden nicht wirklich gleichzeitig laufen, sie werden stattdessen periodisch umgeschaltet, um die Illusion zu erzeugen, als würden sie simultan laufen.

    
user529758 10.01.2012 20:07
quelle
1

Die erste Paralell-Programmierung und die zweite ist das Multitasking, das sogar in einem einzigen Prozessor durchgeführt werden kann

    
Jahan Zinedine 10.01.2012 20:07
quelle

Tags und Links