Лучшая практика для Java IPC - PullRequest
12 голосов
/ 09 сентября 2008

Что является лучшим методом для межпроцессного взаимодействия в многопоточном Java-приложении.

Он должен быть производительным (поэтому, пожалуйста, не JMS), простым в реализации и надежным, чтобы объекты и данные могут быть связаны только с одним потоком?

Любые идеи приветствуются!

Ответы [ 5 ]

15 голосов
/ 09 сентября 2008

Не могли бы вы уточнить немного? Вы имеете в виду IPC в одной JVM? (Несколько потоков, да, но на уровне операционной системы только один процесс.) Или вы имеете в виду несколько JVM? (И действительно межпроцессное взаимодействие на уровне ОС.)

Если это первое, то, возможно, что-то из java.util.concurrent , например ConcurrentLinkedQueue , поможет. (Я передаю сообщения между моими потоками с классами из java.util.concurrent с успехом.)

Если позже, то я просто угадаю и предложу взглянуть на RMI , хотя я не думаю, что это квалифицируется как полностью надежное - вы бы нужно справиться с этим немного больше "руки", как.

9 голосов
/ 09 сентября 2008

Если предположить, что сценарий 1 JVM, тогда нужно искать несколько потоков, а именно java.util.concurrent, особенно различные реализации Queue. Тем не менее, абстракция к тому же может быть хорошей, и там Jetlang выглядит очень интересной, легкой передачей сообщений Java.

4 голосов
/ 09 сентября 2008

Я рекомендую изучить весь пакет java.util.concurrent , который имеет несколько классов для работы с параллелизмом и различными средствами связи между потоками. Все зависит от того, чего вы хотите достичь, так как ваш вопрос довольно общий.

3 голосов
/ 15 мая 2015

Я только что добавил MappedBus на github (http://github.com/caplogic/mappedbus), которая является эффективной библиотекой IPC, которая позволяет нескольким процессам Java / JVM обмениваться сообщениями посредством обмена сообщениями, и она использует файл сопоставления памяти для транспорта. было измерено до 40 миллионов сообщений / с.

3 голосов
/ 27 ноября 2012

Вы должны использовать очередь производителя / потребителя. Делая это, вы избегаете ловушек многопоточного программирования: состояния гонки и взаимоблокировки. Кроме того, это не просто проще и чище, но и намного быстрее, если вы используете очередь без блокировки, такую ​​как Disruptor или MentaQueue. Я написал статью в блоге, где подробно рассказываю об этом и показываю, как получить задержки <100 наносекунд: <a href="http://mentablog.soliveirajr.com/2012/11/inter-thread-communication-with-2-digit-nanosecond-latency/" rel="nofollow"> Обмен данными между потоками с задержкой в ​​две цифры наносекунды .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...