Was ist der Unterschied zwischen einem Thread und einem Prozess im Java-Kontext? Wie wird die Interprozesskommunikation und Inter-Thread-Kommunikation in Java erreicht? Bitte zeigen Sie mir einige reale Beispiele.Java Inter Process Kommunikation und Inter Thread Kommunikation?
Antwort
Der grundlegende Unterschied ist, dass Threads in denselben Adressräumen leben, aber Prozesse in den verschiedenen Adressräumen leben. Das bedeutet, dass es bei der Kommunikation zwischen Threads darum geht, Verweise auf Objekte zu übergeben und gemeinsame Objekte zu ändern. Bei Prozessen geht es jedoch darum, serialisierte Kopien von Objekten zu übergeben.
In der Praxis kann die Java-Inthread-Kommunikation als einfache Java-Methodenaufrufe auf gemeinsam genutztes Objekt mit entsprechender Synchronisation implementiert werden. Alternativ können Sie die neuen Parallelitätsklassen verwenden, um einige der wesentlichen (und fehleranfälligen) Synchronisation zu verbergen Probleme.
Im Gegensatz dazu basiert die Java-Interprozesskommunikation auf der untersten Ebene beim Umwandeln von Status, Anforderungen usw. in Bytefolgen, die als Nachrichten oder als Stream an einen anderen Java-Prozess gesendet werden können. Sie können diese Arbeit selbst erledigen, oder Sie können eine Vielzahl von "Middleware" -Technologien verschiedener Komplexitätsebenen verwenden, um die Implementierungsdetails zu abstrahieren. Zu den verwendbaren Technologien gehören Java-Objektserialisierung, XML, JSON, RMI, CORBA, SOAP/"Webdienste", Nachrichtenwarteschlangen und so weiter.
Auf einer praktischen Ebene ist Interthread-Kommunikation um viele Größenordnungen schneller als Interprozesskommunikation und ermöglicht es Ihnen, viele Dinge viel einfacher zu tun. Der Nachteil ist jedoch, dass alles in derselben JVM leben muss. Daher gibt es potenzielle Skalierbarkeitsprobleme, Sicherheitsprobleme, Robustheitsprobleme und so weiter.
Ich denke gerne an eine einzelne Instanz einer JVM als Prozess. Die Interprozesskommunikation würde also zwischen Instanzen von JVMs erfolgen, beispielsweise über Sockets (Nachrichtenübergabe).
Threads in Java implementieren Runnable und sind in einer JVM enthalten. Sie teilen Daten einfach durch Weitergabe von Referenzen in der JVM herum. Wann immer Threads Daten gemeinsam nutzen, müssen Sie die Daten fast immer schützen, damit sich mehrere Threads nicht gegenseitig stören. Es gibt viele Schutzmechanismen, die verhindern, dass mehrere Threads in kritische Codeabschnitte gelangen.
Ein Thread kann auf Speicher innerhalb eines Prozesses zugreifen, sogar auf Speicher, der von einem anderen Thread innerhalb desselben Prozesses bearbeitet werden kann. Da alle Threads im selben laufenden Prozess intern sind, können sie schneller kommunizieren (weil sie nicht das Betriebssystem benötigen, um zu referieren).
Verfahren können in einem anderen Prozess nicht Speicher zugreifen, auch wenn Sie zwischen Prozessen durch verschiedene Mittel wie kommunizieren kann:
- Network-Pakete.
- Dateien
- Pipes
- Shared Memory
- Semaphore
- Corba Nachrichten
- RPC-Aufrufe
Die wichtige Sache mit Prozess zu erinnern, die Kommunikation zu verarbeiten ist, dass die Kommunikation verwaltet werden müssen durch das Betriebssystem, und wie alle Dinge, die einen mittleren Mann erfordern, fügt das Overhead hinzu.
Auf der Unterseite, wenn ein Thread falsch verhält, tut es dies innerhalb des laufenden Prozesses, und Chancen sind hoch, es wird in der Lage sein, alle gut benehmen Threads zu beseitigen. Wenn ein Prozess sich falsch verhält, kann er nicht direkt in den Speicher der anderen Prozesse schreiben, und die Chancen stehen gut, dass nur der Fehlverhaltensprozess stirbt.
Inter-Thread Kommunikation = Threads innerhalb derselben JVM zu jedem sprechen andere
Inter-Process Communication (IPC) = Fäden innerhalb der gleichen Maschine aber innen zueinander
Threads sprechen in verschiedenen JVMs laufenden Die gleiche JVM kann das Pipelining durch blockierungsfreie Warteschlangen verwenden, um mit einer Latenz von einer Nanosekunde miteinander zu kommunizieren.
Threads in verschiedenen JVMs können Off-Heap Shared Memory verwenden (normalerweise über die gleiche Speicherabbilddatei abgerufen), um miteinander über eine Latenz von Nanosekunden zu kommunizieren.
Threads in verschiedenen Maschinen können das Netzwerk verwenden, um mit einer Latenz von Mikrosekunden miteinander zu kommunizieren.
Für eine vollständige Erklärung über die blockierungsfreien Warteschlangen und IPC können Sie CoralQueue überprüfen.
Haftungsausschluss: Ich bin einer der Entwickler von CoralQueue.
- 1. C# inter-thread Kommunikation
- 2. Inter-Thread-Kommunikation (und Bibliotheken?)
- 3. Inter-Thread-Kommunikation in C++
- 4. Schnelle Inter-Thread-Kommunikation Mechanismus
- 5. Inter-Prozess-Kommunikation in UWP
- 6. Dekoratoren für Inter-Layer-Kommunikation
- 7. Fast Cross Plattform Inter Process Kommunikation in C++
- 8. Verschiedenes und Inter-Thread Kommunikation Anleitung in CUDA
- 9. Inter Application Kommunikation in Apache Funken Streaming
- 10. Inter-Modul-Kommunikation im Linux-Kernel
- 11. Inter-Solr-Knoten Kommunikation mit SSL
- 12. Inter-Process Kommunikationsmöglichkeiten
- 13. Inter-Process Communication Empfehlung
- 14. Inter-Geräte-Kommunikation über Bluetooth mit Phonegap auf Android?
- 15. Inter-Thread-Messaging-Implementierung
- 16. Erkennung der Browser-Unterstützung für Inter-Fenster-Kommunikation
- 17. Mule Inter - App Kommunikation in der gleichen Instanz
- 18. Boost-Inter: Shared Memory und stl Typen
- 19. inter jvm communication
- 20. Android-Thread-Kommunikation AsyncTask
- 21. Unterstützt Kafka sichere Kommunikation?
- 22. Einfache Kommunikation mit einem Java-Thread
- 23. Liferay: Inter-Browser-Sitzung
- 24. Inter Projektabhängigkeiten in Maven
- 25. Was ist die maximale Größe für die postMessage-Methode, die Inter-Frame-Kommunikation ermöglicht?
- 26. Polymer Inter-Komponente Datenbindung?
- 27. Inter-Sub ErrorLine
- 28. WPF - Inter-Modul Abhängigkeit
- 29. DotNetNuke Intermodul Kommunikation
- 30. Code-Analyse-Tools und Inter-Type-Erklärungen
Dank Stephen, ich kann die Antwort theoritisch.Ist besser, wenn Sie einige Echtzeit Beispiele oder Code-Schnipsel geben, um diesen Unterschied zu erklären.Plz – JavaUser
@JavaUser - meinst du Realtime oder Real Life? Wie auch immer, eine gute Möglichkeit, diese Dinge zu lernen, sind Sun/Oracles umfangreiche Online-Tutorial-Informationen. –