Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

466
Views
Comunicación de memoria compartida Java - Python

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:

  1. Java hace un poco de trabajo y dispara una matriz int de longitud 100,000 a ...
  2. Python , que hace algo de trabajo y dispara una nueva matriz de longitud 100,000 de vuelta a...
  3. Java , que hace algo de trabajo... etc.

Tenga en cuenta que

  • Cada programa necesita esperar a que el otro haga su parte.
  • Se ejecutarán en la misma máquina Linux.
  • Haremos una simulación de Monte Carlo, por lo que la velocidad es importante.

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?

  • Sockets de dominio Unix con jnr-unixsocket
  • Zócalos con Speedus
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

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í:

  1. una lista (su lista de 100.000 artículos). Lo llamaremos my_project:list como referencia.
  2. una cerradura. Esto puede ser simplemente una cadena de Redis establecida en "Python" o "Java".

Luego tenga la siguiente interacción:

  1. Tanto Python como Java sondean el bloqueo de Redis. Si es igual a "Python", es el turno de Python. Si "Java", es el turno de Java.
  2. Cualquiera que sea el turno del programa, entra en modo de trabajo y hace lo que sea necesario para my_project:list , luego establece el bloqueo en el turno del otro programa.
  3. Repetir indefinidamente.
over 4 years ago · Santiago Trujillo Report

0

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.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!