Frage

Was ist die beste Methode für die Kommunikation zwischen Prozessen in einer Multithread-Java-App?

Es sollte leistungsfähig sein (also kein JMS bitte) einfach zu implementieren und zuverlässig, damit Objekte und Daten nur an einen Thread gebunden werden können?

Alle Ideen willkommen!

War es hilfreich?

Lösung

Unter der Annahme des Szenarios 1 JVM, mehrere Threads, dann ist tatsächlich java.util.concurrent der Ort, an dem man suchen sollte, insbesondere die verschiedenen Queue-Implementierungen.Eine Abstraktion darüber könnte jedoch schön sein Jetlang Sieht sehr interessant aus, einfache Java-Nachrichtenübermittlung.

Andere Tipps

Könnten Sie das bitte etwas klarstellen?Meinen Sie IPC in einer einzelnen JVM?(Mehrere Threads, ja, aber auf Betriebssystemebene nur ein Prozess.) Oder meinen Sie mehrere JVMs?(Und echte Interprozesskommunikation auf Betriebssystemebene.)

Wenn es das erste ist, dann vielleicht etwas daraus java.util.concurrent, wie ConcurrentLinkedQueue würde den Zweck erfüllen.(Ich gebe Nachrichten zwischen meinen Threads mit Klassen von java.util.concurrent mit Erfolg weiter.)

Wenn das später der Fall ist, dann werde ich nur raten und vorschlagen, einen Blick darauf zu werfen RMI, obwohl ich nicht glaube, dass es als völlig zuverlässig gilt – das müsste man etwas praxisorientierter hinbekommen.

Ich empfehle, sich das Ganze anzusehen java.util.concurrent Paket, das über mehrere Klassen für den Umgang mit Parallelität und verschiedenen Kommunikationsmitteln zwischen Threads verfügt.Alles hängt davon ab, was Sie erreichen möchten, da Ihre Frage ziemlich allgemein ist.

Sie sollten eine Producer/Consumer-Warteschlange verwenden.Dadurch vermeiden Sie die Fallstricke der Multithread-Programmierung:Race-Conditions und Deadlocks.Außerdem ist es nicht nur einfacher und sauberer, sondern auch viel schneller, wenn Sie eine sperrenfreie Warteschlange wie Disruptor oder MentaQueue verwenden.Ich habe einen Blog-Artikel geschrieben, in dem ich ausführlich darüber spreche und zeige, wie man Latenzen von < 100 Nanosekunden erreicht: Inter-Thread-Kommunikation mit einer Latenzzeit im zweistelligen Nanosekundenbereich.

Ich habe gerade MappedBus auf Github hinzugefügt (http://github.com/caplogic/mappedbus), eine effiziente IPC-Bibliothek, die die Kommunikation mehrerer Java-Prozesse/JVMs durch den Austausch von Nachrichten ermöglicht und für den Transport eine speicherzugeordnete Datei verwendet.Der Durchsatz wurde mit 40 Millionen Nachrichten/s gemessen.

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