首页 > 解决方案 > Java 到 C++ 进程间通信

问题描述

在此处输入图像描述

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

1) 处理简单任务的瘦 Java 模块,如 DB 持久性、处理请求等
2) C++ 模块,使用 OpenCV 和 CUDA 进行繁重计算

假设两个组件独立启动。

步骤1: Java层的init()方法调用C++模块的init()方法,从S3读取数千张图像,做一些图像处理并将结果保存在GPU内存中。init()只调用一次,这个数据在 GPU 内存中保持不变。

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

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

一种明显的方法是使用 TCP 套接字(也许使用 GRPC)

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

标签: javac++java-native-interfaceipcswig

解决方案


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

开销最小的将是一些共享内存或内存映射文件。但是 AFAIK 需要(很多)你做更多的工作才能完成。


推荐阅读