Java到C ++的进程间通信

时间:2018-09-25 07:39:18

标签: java c++ java-native-interface ipc swig

enter image description here

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

1)一个瘦Java模块,可以处理简单的任务,如数据库持久性,流程请求等。
2)使用OpenCV和CUDA进行大量计算的C ++模块

说两个组件都独立启动。

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

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

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

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

是否可以将JNI(或SWIG)用于这种IPC通信?

1 个答案:

答案 0 :(得分:2)

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

最小的开销是共享内存或内存映射文件。但是AFAIK要求您(还)需要做更多的工作才能实现。