Frage

Wie entscheiden, ob Threads verwenden oder erstellen separaten Prozess ganz in Ihrer Anwendung Parallelität zu erreichen.

War es hilfreich?

Lösung

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

Wenn Sie brauchen die Arbeiter besser isoliert und robuster zu sein, wie bei den meisten Servern, gehen mit Steckdosen. Wenn ein Thread schlecht abstürzt, dauert es in der Regel den gesamten Prozess ab, in diesem Verfahren arbeiten andere Threads einschließlich. Wenn ein Prozess sauer wird und stirbt, macht es keinen anderen Prozess berühren, damit sie glücklich mit ihrer bussiness gehen weiter, als wäre nichts geschehen.

Andere Tipps

Prozesse haben mehr isolierte Speicher. Dies ist wichtig für eine Reihe von Gründen:

  • Es ist schwieriger für eine einzige Aufgabe, die anderen Aufgaben zum Absturz bringen.
  • Mehr Speicher wird pro Prozess zur Verfügung steht. Dies ist wichtig für große, leistungsstarke Anwendungen wie Apache oder Datenbankserver, wie Postgres. Dies ist wichtig sowohl für zugewiesenen Speicher und Memory-Mapped-Dateien.

Der Grad der Parallelität hängt hauptsächlich von dem physischen Prozessoren / Kern auf dem Gerät. Wenn Sie einen Single-Prozessor / Core-Maschine haben, dann separate Prozesse aufweisen, können zu viel Aufwand verursachen. Themen würden in der Regel in diesem Fall bevorzugt werden.

Wenn Sie mehrere Kerne / CPUs dann je nachdem, was jeder Prozess / Thread der Fall ist, können Sie sich für Prozesse entscheiden, wenn der Aufwand gerechtfertigt ist. Prozesse haben offensichtlich ein viel besseres Niveau des Speicher Isolation als Themen -. Aber zugleich in Windows, Prozesse sind ziemlich schwer, im Vergleich zu Fäden

Themen natürlich können die Daten im gleichen Prozess teilen - aber auch hier würden Sie müssen Zugriff auf die gemeinsam genutzten Daten synchronisieren - korrupten Staat zu verhindern. Gemeinsame Nutzung von Daten zwischen Prozessen ist mehr beteiligt, der Overhead (die als einfache Thread-Synchronisation greated) in Abhängigkeit von den verwendeten Mechanismen wie Named Pipes, kundenspezifische Steckdosen-basierte Kommunikation, mit einem Remote Rahmen, gemeinsam benutzte Datei / Datenbank etc.

Generell sollten Sie Prozesse verwenden, wenn die einzelnen Ausführungsströme brauchen keine globalen Daten zu teilen und mögen sie jeweils von dem anderen geschützt haben.

Unter Windows sind Prozesse schwerer erstellen dann Threads. Wenn Sie also mehrere kleinere Aufgaben, die ein Thread oder Thread-Pool haben wäre besser. Oder ein Verfahren Pool nutzen, um die Prozesse zu recyceln. Auch Zustand zwischen Prozessen teilen, ist mehr Arbeit das ganze Land zwischen Threads zu teilen. Aber dann wieder: Themen könnte einen kompletten Prozess unter anderen Threads nach unten mit ihm destabilisieren. Wenn Sie die Chance, dass das passiert, minimieren Sie separate Prozesse gehen könnte. .Net AppDomains könnte ein Mittelweg zwischen beiden sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top