Ich weiß, dass diese Frage ziemlich alt ist, aber die Dinge haben sich seit 2009 weiterentwickelt.
Es sind jetzt zwei Dinge zu berücksichtigen: die Anzahl der Kerne und die Anzahl der Threads, die in jedem Kern ausgeführt werden können.
Bei Intel-Prozessoren wird die Anzahl der Threads durch das Hyperthreading definiert, das nur 2 beträgt (sofern verfügbar). Aber Hyperthreading verkürzt Ihre Ausführungszeit um zwei, selbst wenn Sie nicht zwei Threads verwenden! (dh 1 Pipeline, die von zwei Prozessen gemeinsam genutzt wird - dies ist gut, wenn Sie mehr Prozesse haben, sonst nicht so gut. Mehr Kerne sind definitiv besser!)
Auf anderen Prozessoren haben Sie möglicherweise 2, 4 oder sogar 8 Threads. Wenn Sie also 8 Kerne haben, von denen jeder 8 Threads unterstützt, können 64 Prozesse ohne Kontextwechsel parallel ausgeführt werden.
"Keine Kontextumschaltung" ist offensichtlich nicht der Fall, wenn Sie mit einem Standardbetriebssystem arbeiten, das die Kontextumschaltung für alle möglichen anderen Dinge außerhalb Ihrer Kontrolle ausführt. Aber das ist die Hauptidee. Bei einigen Betriebssystemen können Sie Prozessoren zuweisen, sodass nur Ihre Anwendung Zugriff auf diesen Prozessor hat.
Nach meiner eigenen Erfahrung sind mehrere Threads gut, wenn Sie viele E / A haben. Wenn Sie sehr viel speicherintensive Arbeit haben (Quelle 1 lesen, Quelle 2 lesen, schnelle Berechnung, Schreiben), hilft es nicht, mehr Threads zu haben. Dies hängt wiederum davon ab, wie viele Daten Sie gleichzeitig lesen / schreiben (dh wenn Sie SSE 4.2 verwenden und 256-Bit-Werte lesen, werden alle Threads in ihrem Schritt gestoppt ... mit anderen Worten, 1 Thread ist wahrscheinlich viel einfacher zu implementieren und Wahrscheinlich fast genauso schnell, wenn nicht sogar schneller. Dies hängt von Ihrer Prozess- und Speicherarchitektur ab. Einige erweiterte Server verwalten separate Speicherbereiche für separate Kerne, sodass separate Threads schneller sind, vorausgesetzt, Ihre Daten werden ordnungsgemäß abgelegt Architekturen, 4 Prozesse laufen schneller als 1 Prozess mit 4 Threads.)