Java – Python共享内存通信

我们有一个用 Java编写的程序和一个用 Python编写的程序,并且需要以乒乓方式将它们组合在一起,每次交换一个长度为100,000的整数数组,并花费大约0.1-1秒来完成它们的工作:

> Java做了一些工作并触发一个长度为100,000的int数组到…
> Python,它做了一些工作并发射一个长度为100,000的新数组回…
> Java,它做了一些工作……等等

注意

>每个程序都需要等待另一个程序才能完成它.
>它们将在同一台Linux机器上运行.
>我们将进行蒙特卡罗模拟,因此速度很重要.

我对Java更熟悉,并且了解共享内存支持的文件方法可能是最快的. This似乎与Java方面相关,但是如何让每个程序等待/阻止另一个程序完成其工作并在另一个开始读取之前更新共享内存?我听说过一种叫做“信号量”的东西,但无法弄明白.

这些是我的后备想法,但也许他们更好?

>带有jnr-unixsocket的Unix域套接字
> Sockets与Speedus

最佳答案 寻找快速中间数据服务器以协助它们之间的通信. Redis会做的伎俩.那里你需要两个数据结构:

>一个列表(您的100,000个项目列表).我们将调用my_project:list作为参考.
>锁.这可以是设置为“Python”或“Java”的Redis字符串.

然后进行以下互动:

> Python和Java都在调查Redis锁.如果它等于“Python”,那就是Python.如果是“Java”,那就是Java了.
>无论哪个程序进入工作模式并对my_project执行任何操作:list,然后将锁定设置为其他程序.
>无限期地重复.

点赞