Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top