We have one program in Java and one in Python, and need to get them taking together in a ping-pong manner, each time exchanging an integer array of length 100,000, and taking ~ 0.1 - 1 second to do their work:
- Java does some work and fires an int array of length 100,000 over to ...
- Python, which does some work and fires a new array of length 100,000 back to ...
- Java, which does some work ... etc
Note that
- Each program needs to wait for the other to do it's part.
- They will run on the same Linux machine.
- We will do Monte Carlo simulation, so speed is important.
I am more familiar with Java, and understand that a shared memory backed file approach is likely to be the fastest. This seems relevant for the Java side, but how would I get each program to wait/block for the other to complete its work and update the shared memory before the other starts reading? I've heard of something called 'semaphore', but can't figure it out.
These are my fallback ideas, but perhaps they are better?
- Unix Domain Sockets with jnr-unixsocket
- Sockets with Speedus