2016-11-25 3 views
-1

Ich erstelle eine C++ App. Wie viele Threads können gleichzeitig ausgeführt werden?Wie viele Threads kann meine CPU/OS verarbeiten?

+1

Als Faustregel: Sie können so viele Threads gleichzeitig wie die Anzahl der CPU laufen Kerne, die Sie zur Verfügung haben. –

+0

Ich gehe voran und entferne die "Was lib empfehlen Sie Frage"; Bibliotheksempfehlungen sind in StackOverflow nicht verfügbar. –

+1

Ich erinnere mich, dass ich im Jahr 1998 Multi-Threaded-Workstation entwickelt und implementiert, die 45 Threads auf einem 2-Kern-System hatte. Der Großteil der Verarbeitung war Hintergrundaufgaben in mehreren Thread-Pools, wobei jeder Pool eine andere Priorität hatte. Heutzutage habe ich 16 mal die Kerne, verwende aber normalerweise nicht so viele Threads. – drescherjm

Antwort

3

Grundsätzlich kann Ihr Betriebssystem mehr oder weniger unendlich viele Threads verarbeiten. Das ist nur eine Frage der Aufrechterhaltung einer Liste von Kontexten/Terminierungsanforderungen.

gleichzeitig kann verschiedene Dinge für Sie bedeuten - wenn Sie eigentlich "zur gleichen Zeit" bedeuten, können Sie natürlich nicht mehr parallele Ausführung als Kerne in Ihrer CPU haben. Aber im weiteren Sinne, da "abwechselnd ausgeführt wird, während ein Thread beispielsweise durch Warten auf Datei-I/O blockiert wird, können andere arbeiten", gibt es keine Begrenzung.

Es gibt Grenzen für die Nützlichkeit - es gibt einen Handling Overhead und das Austauschen von Threads führt zu häufigen Cache-Invalidierungen, aber es gibt keine harten Grenzen.

+0

_ "Jetzt ist gleichzeitig ein elastischer Ausdruck" _ Das ist strittig. –

+0

@ πάνταῥεῖ jetzt besser? –

+0

Nicht wirklich. Das Problem ist, dass die Frage ist zu weit und sollte geschlossen werden. Auch die Aussage _ "Grundsätzlich kann Ihr Betriebssystem mehr oder weniger unendlich viele Threads verarbeiten." _ Ist einfach falsch. –

1

Es gibt eine std::thread Memberfunktion hardware_concurrency() dass gibt eine Schätzung der Anzahl der Hardware-Thread Kontexte genannt:

#include <iostream> 
#include <thread> 

int main(){ 
    std::cout << std::thread::hardware_concurrency() << std::endl; 
    return 0; 
} 
Verwandte Themen