Wie Sie entscheiden, ob Sie Threads verwenden oder separate Prozesse in Ihrer Anwendung erstellen, um Parallelität zu erzielen.Prozess vs Threads
Antwort
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.
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.
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.
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.
Ein paar Links, die Sie sich entscheiden, helfen könnte, ich hoffe:
http://blog.labnotes.org/2006/08/29/why-processes-scale-better-than-threads/ http://www.jroller.com/cpurdy/entry/fastcgi_not_so_fast
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.
- 1. Threads vs Kerne
- 2. decaf threads vs. boost threads vs omnithreads
- 3. Prozess und Threads
- 4. Anwendungs-Threads vs. Service-Threads
- 5. Signalisieren aller Threads in einem Prozess
- 6. OS X Java maximale Threads pro Prozess
- 7. Zombie-Prozess, obwohl Threads noch laufen
- 8. Threads vs. Prozesse in Python
- 9. Threads vs. pthread in Perl
- 10. Uwsgi mit Gevent vs Threads
- 11. Aktive Themen vs Concurrent Threads
- 12. Java-Prozess getInputStream vs. getOutputStream
- 13. Python-Anfragen - Threads/Prozesse vs. IO
- 14. Tasks vs Threads in .NET 4.5
- 15. Was ist besser: Wählen Sie vs Threads?
- 16. VS 7.1 Release kompilieren und mehrere Threads
- 17. Thread Pool vs viele einzelne Threads
- 18. Wann std :: async vs. std :: threads verwenden?
- 19. Python-Multiprocessing-Prozess vs. Standalone Python VM
- 20. Anzahl der Threads pro Worker-Prozess erhöhen IIS
- 21. Warum spuckt Multiprozess Multi Threads in jedem Prozess?
- 22. Linux: erkennen zur Laufzeit, dass ein Prozess mehrere Threads haben
- 23. C# Prozess verweilt, nachdem alle Threads beendet wurden
- 24. Das EBP eines Threads in einem anderen Prozess erhalten
- 25. Wie teilen Sie einen großen Prozess zwischen Threads
- 26. Wie können Sie Threads im selben Prozess auflisten?
- 27. Kommunikation mit niedriger Latenz zwischen Threads im selben Prozess
- 28. Wie führe ich einen Prozess nach Abschluss von Threads weiter?
- 29. Unterscheiden zwischen Java-Threads und OS-Threads?
- 30. Worker vs Prozess vs Client und Job vs Aufgabe Erklärung in Sellerie Python Modul