Java 到 C++ 进程间通信

Java to C++ Inter Process Communication

我的应用程序由两个组件组成运行在同一台机器上:

1) 一个精简的 Java 模块,它处理简单的任务,如数据库持久化、处理请求等
2) 使用 OpenCV 和 CUDA

进行大量计算的 C++ 模块

假设两个组件独立启动。

第 1 步: init() Java 层的方法调用 init() C++ 模块的方法,它将从 S3 读取数千张图像,进行一些图像处理并将结果保存在 GPU 中 memory.init() 仅调用一次,并且此数据在 GPU 内存中保持不变。

步骤 2: 在 Java 层中对 calc() 的连续调用调用 C++ 模块中的 calc() 方法,该方法使用传递的参数利用数据进行一些处理GPU 内存并将结果发送到 Java 层。

我的问题是如何以更少的开销在 Java 和 C++ 进程之间实现此 IPC?

一个明显的方法是使用 TCP 套接字(可能使用 GRPC)

是否可以使用 JNI(或 SWIG)进行这种 IPC 通信?

我假设应用程序等不是非常关键。然后一个 RPC 框架,比如 Apache Thrift 可能是一个理想的候选者,因为它简化了 RPC 任务(基本上使用 TCP 连接进行通信)。通过本地 TCP 连接发回结果图像听起来不会引起任何问题。 https://thrift.apache.org/

开销最小的是一些共享内存或内存映射文件。但是据我所知,您需要(很多)更多的工作才能完成。