2008-09-15 2 views
23

Wie Sie entscheiden, ob Sie Threads verwenden oder separate Prozesse in Ihrer Anwendung erstellen, um Parallelität zu erzielen.Prozess vs Threads

Antwort

15

Themen mehr geringes Gewicht sind, und für die Herstellung von mehreren „Arbeiter“ nur alle verfügbaren CPUs zu nutzen oder Kerne, du bist besser mit Threads.

Wenn Sie möchten, dass die Arbeiter besser isoliert und robuster sind, wie bei den meisten Servern, gehen Sie mit Sockets. Wenn ein Thread schlecht abstürzt, wird normalerweise der gesamte Prozess heruntergefahren, einschließlich anderer Threads, die in diesem Prozess arbeiten. Wenn ein Prozess sauer wird und stirbt, berührt er keinen anderen Prozess, so dass er glücklich mit seinem Geschäft fortfahren kann, als ob nichts passiert wäre.

2

Im Allgemeinen sollten Sie Prozesse verwenden, wenn die einzelnen Ausführungsströme keine globalen Daten freigeben müssen und Sie beide voneinander geschützt haben möchten.

4

Der Grad der Parallelität hängt hauptsächlich von den physischen Prozessoren/Kernen ab, die auf Ihrer Maschine verfügbar sind. Wenn Sie einen Single-Prozessor/Core-Computer haben, kann das Ausführen separater Prozesse zu viel Overhead verursachen. Gewinde würden in diesem Fall im Allgemeinen bevorzugt werden.

Wenn Sie mehrere Kerne/CPUs haben, können Sie sich je nach Prozess/Thread für Prozesse entscheiden, wenn der Aufwand gerechtfertigt ist. Prozesse haben offensichtlich eine viel bessere Speicherisolation als Threads - aber gleichzeitig sind die Prozesse in Windows im Vergleich zu Threads ziemlich umfangreich.

Threads können natürlich Daten im selben Prozess teilen - aber wieder müssen Sie den Zugriff auf die freigegebenen Daten synchronisieren - um einen fehlerhaften Zustand zu verhindern. Das Teilen von Daten zwischen Prozessen ist komplizierter, der Overhead (der größer ist als die einfache Thread-Synchronisation), abhängig von den verwendeten Mechanismen wie Named Pipes, benutzerdefinierte Sockets-basierte Kommunikation, Verwendung eines Remoting-Frameworks, gemeinsam genutzter Datei/Datenbank usw.

1

In Windows sind Prozesse schwerer, um dann Threads zu erstellen. Also, wenn Sie mehrere kleinere Aufgaben haben, wäre ein Thread oder Thread-Pool besser. Oder verwenden Sie einen Prozesspool, um die Prozesse zu recyceln. Auch das Teilen von Zuständen zwischen Prozessen ist mehr Arbeit als das Teilen von Zuständen zwischen Threads. Aber dann wieder: Threads könnten einen kompletten Prozess destabilisieren und andere Threads mit sich bringen. Wenn Sie die Wahrscheinlichkeit dafür minimieren möchten, können Sie getrennte Prozesse wählen. Die AppDomains von Net könnten ein Mittelweg zwischen beiden sein.

5

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 zu stürzen.
  • Mehr Speicher wird pro Prozess verfügbar sein. Dies ist wichtig für große, leistungsstarke Anwendungen wie Apache oder Datenbankserver wie Postgres. Dies ist sowohl für den zugeordneten Speicher als auch für die Speicherabbilddateien wichtig.
Verwandte Themen