Java 到 C++ 进程间通信

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

enter image description here

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

1) 一个瘦 Java 模块,用于处理简单的任务,例如数据库持久化、处理请求等
2) 使用 OpenCV 和 CUDA 进行繁重计算的 C++ 模块

假设两个组件独立启动。

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

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

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

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

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

最佳答案

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

最小的开销是一些共享内存或者内存映射文件。但据我所知,这需要您做更多的工作才能实现。

关于Java 到 C++ 进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52492982/

相关文章:

android - 在 Android Studio 上通过 CMake 将 OpenCV 添加到 native C 代码

java - 以 boolean 值作为返回值的递归方法来计算数字中的数字

java - 尝试使用 bouncycaSTLe 加密抛出错误

c++ - 用 C++ 实现 Mongoose 服务器

Java多接口(interface)继承与值传递

java - 即使在添加 def 后,外部 "C"也会给出错误 "Linkage specification is not allowed"。在头文件中?

java - GWT 还是 Java Web Start?

java - 如何找到服务器可以处理的最大并发连接数?

c++ - 额外资格 C++

c++ - Qt 程序无故意外结束