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?
Der Begriff Threads umfasst normalerweise drei Abstraktionsschichten:
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.
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.
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.
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.
Die erste Paralell-Programmierung und die zweite ist das Multitasking, das sogar in einem einzigen Prozessor durchgeführt werden kann
Tags und Links c++ multithreading