2008-09-09 16 views
11

cuál es el mejor método para la comunicación entre procesos en una aplicación Java multiproceso.Práctica recomendada para Java IPC

Debe ser el rendimiento (por lo que no JMS por favor) fácil de implementar y confiable, de modo que los datos & se pueden vincular a un solo subproceso?

¡Todas las ideas son bienvenidas!

+2

IPC es "Comunicación entre procesos". – WhyNotHugo

Respuesta

9

Suponiendo que el escenario 1 JVM, múltiples hilos, entonces de hecho java.util.concurrent es el lugar para buscar, específicamente las diversas implementaciones de Queue. Sin embargo, una abstracción además de eso puede ser agradable y hay Jetlang que se ve muy interesante y liviano al pasar mensajes de Java.

15

¿Podría aclarar un poco? ¿Te refieres a IPC en una sola JVM? (Varios hilos, sí, pero a nivel de sistema operativo solo un proceso). ¿O te refieres a varias JVM? (comunicaciones y verdaderamente OS-nivel inter proceso).

si es la primera, entonces tal vez algo de java.util.concurrent, como ConcurrentLinkedQueue haría el truco. (Paso mensaje a todo entre medio de mis discusiones con las clases de java.util.concurrent con éxito.)

Si la tarde, luego voy a sugerir simplemente adivinar y echar un vistazo a RMI, aunque yo no' Creo que califica como totalmente confiable, tendrías que manejar eso un poco más como 'manos a la obra'.

+0

RMI es, de lejos, la mejor manera para IPC entre diferentes JVM. – trshiv

+0

Eso no siempre es verdad. RMI puede ser simple, pero requiere que la interfaz desde la que se generan los stubs permanezca estática, sin cambios. La elección de IPC depende de las necesidades de la aplicación. Un mensaje que pase el mecanismo de IPC podría ser mejor en algunos casos de uso. – gpampara

+0

IPC es "Comunicación entre procesos", las clases en java.util.concurrent están diseñadas para varios hilos de un solo proceso, no para procesos diferentes. – WhyNotHugo

4

Recomiendo buscar en el paquete completo java.util.concurrent, que tienen múltiples clases para tratar la concurrencia y diferentes medios de comunicación entre los hilos. Todo depende de lo que quieras lograr, ya que tu pregunta es bastante general.

3

Debe usar una cola productor/consumidor. Al hacer eso evitas las trampas de la programación multiproceso: condiciones de carrera y puntos muertos. Además, no es solo más fácil y más limpio, sino también mucho más rápido si utiliza una cola libre de bloqueo como Disruptor o MentaQueue. Escribí un artículo de blog donde hablo de esto en detalle y le muestro cómo obtener < latencias de 100 nanosegundos: Inter-thread communication with 2-digit nanosecond latency.

3

Acabo de agregar MappedBus en github (http://github.com/caplogic/mappedbus) que es una biblioteca de IPC eficiente que permite que varios procesos Java/JVM se comuniquen intercambiando mensajes y utiliza un archivo mapeado de memoria para el transporte. El rendimiento se ha medido a 40 millones de mensajes/s.

Cuestiones relacionadas