Лучшая практика для 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 миллионов сообщений/с.