Межпроцессное взаимодействие между Java и C ++ - PullRequest
0 голосов
/ 25 сентября 2018

enter image description here

Мое приложение состоит из двух компонентов, работающих на одном компьютере :

1) Тонкий Java-модуль, который обрабатываетпростые задачи работают как устойчивость БД, обработка запросов ... и т. д.
2) Модуль C ++, который выполняет тяжелые вычисления с использованием OpenCV и CUDA

Скажем, оба компонента запускаются независимо.

Шаг 1: метод init () Java Layer вызывает метод init () модуля C ++, который будет считывать тысячи изображений из S3, выполнять некоторую обработку изображений и сохранятьрезультаты в GPU memory.init () вызывается только один раз, и эти данные остаются неизменными в памяти GPU.

Шаг 2: Последовательные вызовы calc () на уровне Java вызывают calc () метод в модуле C ++, который выполняет некоторую обработку с использованием переданных аргументов, используя данные в памяти графического процессора, и результат отправляется на уровень Java.

Мой вопрос заключается в том, как достичь этого IPC между процессом Java и C ++ с меньшими издержками?

Один очевидный способ - использовать TCP-сокеты (возможно, использовать GRPC)

Можно ли использовать JNI (или SWIG) для такого типа связи IPC?

1 Ответ

0 голосов
/ 25 сентября 2018

Я собираюсь предположить, что приложение и т. Д. Не очень критично.Тогда фреймворк для RPC, такой как Apache Thrift, может быть идеальным кандидатом, потому что он упрощает задачу RPC (в основном использует TCP-соединение для связи).Отправка полученного изображения обратно по локальному TCP-соединению, похоже, не вызовет каких-либо проблем.https://thrift.apache.org/

Наименьшими затратами будет некоторая общая память или, возможно, файл сопоставленной памяти.Но AFAIK потребуется (много) больше работы с вашей стороны, чтобы осуществить.

...