Domanda

qual è il metodo migliore per la comunicazione tra processi in un'app Java multithread.

Dovrebbe essere performante (quindi NO JMS per favore) facile da implementare e affidabile, in modo che oggetti e dati possano essere legati a un solo thread?

Qualsiasi idea è benvenuta!

È stato utile?

Soluzione

Supponendo lo scenario 1 JVM, più thread, quindi effettivamente java.util.concurrent è il posto in cui cercare, in particolare le varie implementazioni di Queue.Tuttavia un'astrazione in più può essere carina e lì Jetlang sembra molto interessante, passaggio di messaggi Java leggero.

Altri suggerimenti

Potresti chiarire un po'?Intendi IPC in una singola JVM?(Più thread, sì, ma a livello di sistema operativo un solo processo.) O intendi più JVM?(E comunicazioni tra processi veramente a livello di sistema operativo.)

Se è il primo, allora forse qualcosa fuori java.util.concurrent, Piace ConcurrentLinkedQueue farebbe il trucco.(Passo il messaggio tra i miei thread con le classi da java.util.concurrent con successo.)

Se dovesse succedere più tardi, farò semplicemente un'ipotesi e suggerirò di dare un'occhiata RMI, anche se non penso che si qualifichi come completamente affidabile: dovresti gestirlo un po' più "praticamente".

Consiglio di esaminare l'intero java.util.concurrent pacchetto, che ha più classi per gestire la concorrenza e diversi mezzi di comunicazione tra i thread.Tutto dipende da cosa vuoi ottenere, poiché la tua domanda è piuttosto generale.

Dovresti utilizzare una coda produttore/consumatore.In questo modo eviti le insidie ​​​​della programmazione multithread:condizioni di gara e situazioni di stallo.Inoltre non è solo più semplice e pulito, ma anche molto più veloce se usi una coda senza blocchi come Disruptor o MentaQueue.Ho scritto un articolo sul blog in cui ne parlo in dettaglio e mostro come ottenere latenze < 100 nanosecondi: Comunicazione inter-thread con latenza di nanosecondi a 2 cifre.

Ho appena aggiunto MappedBus su github (http://github.com/caplogic/mappedbus) che è un'efficiente libreria IPC che consente a diversi processi Java/JVM di comunicare scambiando messaggi e utilizza un file mappato in memoria per il trasporto.Il throughput è stato misurato a 40 milioni di messaggi/s.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top