24 Stimmen

Prozess vs. Threads

Wie Sie entscheiden, ob Sie in Ihrer Anwendung Threads verwenden oder einen separaten Prozess erstellen sollen, um Parallelität zu erreichen.

15voto

wvdschel Punkte 11690

Threads sind leichter, und für die Erstellung mehrerer "Worker", um alle verfügbaren CPUs oder Kerne zu nutzen, ist man mit Threads besser bedient.

Wenn die Arbeiter besser isoliert und robuster sein sollen, wie bei den meisten Servern, sollten Sie Sockets verwenden. Wenn ein Thread abstürzt, ist normalerweise der gesamte Prozess betroffen, einschließlich anderer Threads, die in diesem Prozess arbeiten. Wenn ein Prozess abstürzt, hat das keine Auswirkungen auf andere Prozesse, so dass diese fröhlich weiterarbeiten können, als wäre nichts passiert.

5voto

Adam Tegen Punkte 24281

Prozesse haben mehr isolierten Speicher. Dies ist aus einer Reihe von Gründen wichtig:

  • Es ist schwieriger für eine einzelne Aufgabe, die anderen Aufgaben zum Absturz zu bringen.
  • Pro Prozess wird mehr Speicherplatz zur Verfügung stehen. Dies ist wichtig für große, leistungsstarke Anwendungen wie Apache oder Datenbankserver wie Postgres. Dies ist sowohl für den zugewiesenen Speicher als auch für die im Speicher abgebildeten Dateien wichtig.

4voto

Krishna Punkte 3007

Der Grad der Parallelität hängt in erster Linie von den auf Ihrem Rechner verfügbaren physischen Prozessoren/Kernen ab. Wenn Sie einen Rechner mit nur einem Prozessor/Kern haben, kann es sein, dass separate Prozesse zu viel Overhead verursachen. In diesem Fall wären Threads generell vorzuziehen.

Wenn Sie mehrere Kerne/CPUs haben, können Sie sich, je nachdem, was jeder Prozess/Thread tut, für Prozesse entscheiden, wenn der Overhead gerechtfertigt ist. Prozesse haben natürlich eine viel bessere Speicherisolierung als Threads - aber gleichzeitig sind Prozesse unter Windows im Vergleich zu Threads ziemlich schwerfällig.

Threads können natürlich Daten im selben Prozess gemeinsam nutzen - aber auch hier müsste der Zugriff auf die gemeinsam genutzten Daten synchronisiert werden, um einen fehlerhaften Zustand zu verhindern. Die gemeinsame Nutzung von Daten zwischen Prozessen ist aufwändiger. Der Overhead (der größer ist als bei der einfachen Thread-Synchronisierung) hängt von den verwendeten Mechanismen ab, wie z. B. Named Pipes, benutzerdefinierte Socket-basierte Kommunikation, Verwendung eines Remoting-Frameworks, gemeinsame Datei/Datenbank usw.

2voto

Matt Brandt Punkte 901

Im Allgemeinen sollten Sie Prozesse verwenden, wenn die einzelnen Ausführungsströme keine globalen Daten austauschen müssen und Sie sie voreinander schützen möchten.

2voto

Andrei Punkte 764

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X