我的应用程序由两个组件组成,在同一台计算机上运行:
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/