Question

quelle est la meilleure méthode de communication inter-processus dans une application Java multithread.

Il doit être performant (donc pas de JMS s'il vous plaît) facile à implémenter et à filer, afin que les objets et les données puissent être liés à un seul thread?

Toutes les idées sont les bienvenues !

Était-ce utile?

La solution

En supposant le scénario 1 JVM, plusieurs threads, alors java.util.concurrent est l'endroit où chercher, en particulier les différentes implémentations de file d'attente.Cependant une abstraction en plus peut être sympa et là Jetlang semble très intéressant, message Java léger passant.

Autres conseils

Pourriez-vous clarifier un peu ?Voulez-vous dire IPC dans une seule JVM ?(Plusieurs threads, oui, mais au niveau du système d'exploitation, un seul processus.) Ou voulez-vous dire plusieurs JVM ?(Et véritablement des communications inter-processus au niveau du système d'exploitation.)

Si c'est le premier, alors peut-être que quelque chose vient de java.util.concurrent, comme ConcurrentLinkedQueue ferait l'affaire.(Je transmets des messages entre mes discussions avec les classes de java.util.concurrent avec succès.)

Si c'est plus tard, je vais simplement deviner et suggérer de jeter un œil à IRM, même si je ne pense pas qu'il soit considéré comme totalement fiable, vous devrez gérer cela de manière un peu plus pratique.

Je recommande d'examiner l'ensemble java.util.concurrent package, qui a plusieurs classes pour gérer la concurrence et différents moyens de communication entre les threads.Tout dépend de ce que vous souhaitez réaliser, car votre question est assez générale.

Vous devez utiliser une file d'attente producteur/consommateur.En faisant cela, vous évitez les pièges de la programmation multithread :conditions de concurrence et impasses.De plus, ce n'est pas seulement plus simple et plus propre, mais aussi beaucoup plus rapide si vous utilisez une file d'attente sans verrouillage comme Disruptor ou MentaQueue.J'ai écrit un article de blog dans lequel j'en parle en détail et montre comment obtenir des latences < 100 nanosecondes : Communication inter-thread avec une latence nanoseconde à 2 chiffres.

Je viens d'ajouter MappedBus sur github (http://github.com/caplogic/mappedbus) qui est une bibliothèque IPC efficace qui permet à plusieurs processus Java/JVM de communiquer en échangeant des messages et qui utilise un fichier mappé en mémoire pour le transport.Le débit a été mesuré à 40 millions de messages/s.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top