Лучшая практика для Java IPC

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

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

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

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Вы должны использовать очередь производителя/потребителя. Делая это, вы избегаете ловушек многопоточного программирования: гоночных условий и тупиков. Кроме того, это не просто проще и чище, но и намного быстрее, если вы используете незаблокированную очередь, такую ​​как Disruptor или MentaQueue. Я написал статью в блоге, где я подробно расскажу об этом и покажу, как получить < Задержки в 100 наносекунд: Межпоточная связь с 2-значной наносекундной задержкой.

Ответ 5

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