Die Behauptung, dass Threads "leicht" sind, ist - je nach Plattform - nicht unbedingt zuverlässig.
Ein Betriebssystem-Thread muss die Ausführung von systemeigenem Code unterstützen, z. geschrieben in C. Also muss es einen Stapel von anständiger Größe bereitstellen, normalerweise in Megabytes gemessen. Wenn Sie also 1000 Threads gestartet haben (vielleicht in dem Versuch, 1000 gleichzeitige Verbindungen zu Ihrem Server zu unterstützen), würden Sie in Ihrem Prozess einen Speicherbedarf von 1 GB haben, bevor Sie überhaupt mit der eigentlichen Arbeit beginnen.
Dies ist ein echtes Problem bei hochskalierbaren Servern, sodass sie Threads nicht so verwenden, als wären sie überhaupt leicht. Sie behandeln sie als schwergewichtige Ressourcen. Sie können stattdessen eine begrenzte Anzahl von Threads in einem Pool erstellen und Arbeitselemente aus einer Warteschlange übernehmen.
Da dies bedeutet, dass die Threads langlebig und klein sind, könnte es besser sein, stattdessen Prozesse zu verwenden. Auf diese Weise erhalten Sie Adressraumisolierung und es gibt nicht wirklich ein Problem mit Ressourcenmangel.
Zusammenfassend: Seien Sie vorsichtig mit "Marketing" -Ansprüchen, die im Namen von Threads gemacht werden. Parallelverarbeitung ist großartig (zunehmend wird es notwendig sein), aber Threads sind nur eine Möglichkeit, dies zu erreichen.
Halten Binging für "Prozess Erstellung" und Ihr Betriebssystem und Sie werden sehen, wie viel Overhead gibt es in einen Prozess zu erstellen. –
@No Rückerstattungen Keine Rückgaben: Und Sie werden feststellen, dass es zwischen den Betriebssystemen erheblich unterscheidet. –
@No Refunds No Returns - Was ist das Übersprechen der Cache-Synchronisation zwischen Threads auf einem Multi-Core-Rechner oder der Overhead des Kontextwechsels und des Speicherns des Stack-Status und des Register-Sets? – zebrabox