Tenemos un programa en Java y otro en Python, y necesitamos que se unan en forma de ping-pong, cada vez que intercambien una matriz de enteros de longitud 100 000, y tomen ~ 0.1 - 1 segundo para hacer su trabajo:
Tenga en cuenta que
Estoy más familiarizado con Java y entiendo que un enfoque de archivo respaldado por memoria compartida probablemente sea el más rápido. Esto parece relevante para el lado de Java, pero ¿cómo puedo hacer que cada programa espere/bloquee a que el otro complete su trabajo y actualice la memoria compartida antes de que el otro comience a leer? He oído hablar de algo llamado 'semáforo', pero no puedo entenderlo.
Estas son mis ideas alternativas, pero ¿quizás sean mejores?
Elija un servidor de datos intermediario rápido para ayudar en la comunicación entre ellos. Redis haría el truco. Necesitarás dos estructuras de datos allí:
my_project:list
como referencia.Luego tenga la siguiente interacción:
my_project:list
, luego establece el bloqueo en el turno del otro programa.Podría intentar combinar java y python en el mismo proceso usando jep . La última versión agregó soporte para compartir memoria entre python y java usando numpy ndarrays y java direct buffers . Esto le permitiría compartir los datos sin copiarlos, lo que debería brindar el mejor rendimiento posible.