2010-03-27 15 views

Respuesta

15

La diferencia fundamental es que las discusiones viven en los mismos espacios de direcciones, pero los procesos viven en los diferentes espacios de direcciones. Esto significa que la comunicación entre subprocesos se trata de pasar referencias a objetos y cambiar objetos compartidos, pero los procesos se trata de pasar copias en serie de objetos.

En la práctica, Java interthread communication puede implementarse como llamadas de método Java simples en objetos compartidos con sincronización apropiada. Alternativamente, puede usar las nuevas clases de concurrencia para ocultar algunas de las sincronizaciones (y propensas a errores) cuestiones.

Por el contrario, la comunicación interproceso de Java se basa en el nivel más bajo en el estado de giro, solicitudes, etc. en secuencias de bytes que pueden enviarse como mensajes o como una secuencia a otro proceso de Java. Puede hacerlo usted mismo, o puede usar una variedad de tecnologías de "middleware" de varios niveles de complejidad para abstraer los detalles de implementación. Las tecnologías que se pueden utilizar incluyen, Java serialización de objetos, XML, JSON, RMI, CORBA, SOAP/"servicios web", el mensaje haciendo fila, y así sucesivamente.

A nivel práctico, la comunicación interthread es muchos órdenes de magnitud más rápido que la comunicación entre procesos, y le permite hacer muchas cosas mucho más simple. Pero la desventaja es que todo tiene que vivir en la misma JVM, por lo que hay posibles problemas de escalabilidad, problemas de seguridad, problemas de robustez, etc.

+0

Gracias Stephen, puedo obtener la respuesta teóricamente. Más vale si das algunos ejemplos en tiempo real o fragmento de código para explicar esta diferencia.Plz – JavaUser

+3

@JavaUser - ¿te refieres a la vida real o en tiempo real? De cualquier forma, una buena forma de aprender esto es de la extensa información en línea de Sun/Oracle. –

2

me gusta pensar en una sola instancia de una JVM como un proceso. Por lo tanto, la comunicación entre procesos sería entre instancias de JVM, por ejemplo, a través de sockets (transmisión de mensajes).

Los hilos en java implementan Runnable y están contenidos dentro de una JVM. Comparten datos simplemente pasando referencias en la JVM. Cuando los hilos comparten datos, casi siempre es necesario proteger los datos para que varios hilos no se golpeen entre sí. Hay muchos mecanismos para la protección que implican evitar que múltiples hilos ingresen secciones críticas de código.

5

Un subproceso puede acceder a la memoria dentro de un proceso, incluso la memoria que podría ser manipulada por otro subproceso dentro del mismo proceso. Como todos los hilos son internos al mismo proceso, pueden comunicarse más rápidamente (porque no necesitan el sistema operativo para arbitrar).

Un proceso no puede acceder a la memoria dentro de otro proceso, aunque se puede establecer comunicación entre procesos a través de diversos medios como:

  1. paquetes de red.
  2. archivos
  3. Tubos
  4. mensajes
  5. memoria compartida
  6. semáforos
  7. Corba
  8. llamadas RPC

Lo importante para recordar a los procesos de proceso de comunicación es que la comunicación debe ser gestionado a través del sistema operativo, y como todo lo que requiere un intermediario, eso agrega sobrecarga.

En el lado negativo, si un hilo se comporta mal, lo hace dentro del proceso de ejecución, y las probabilidades son altas, será capaz de eliminar todos los hilos que se comportan bien. Si un proceso se comporta mal, no puede escribir directamente en la memoria de los otros procesos, y las probabilidades son que solo el proceso de mala conducta morirá.

2

Comunicación Inter-Thread = hilos dentro de la misma JVM que hablan entre sí

comunicación entre procesos (IPC) = hilos dentro de la misma máquina, pero se ejecuta en diferentes JVM hablar el uno al otro

roscas interiores la misma JVM puede usar la canalización a través de colas sin bloqueo para comunicarse entre sí con una latencia de nanosegundos.

Los subprocesos en diferentes JVM pueden usar memoria compartida fuera de montón (generalmente adquirida a través del mismo archivo mapeado en memoria) para comunicarse entre sí con latencia de nanosegundos.

Los hilos en diferentes máquinas pueden usar la red para comunicarse entre sí con una latencia de microsegundos.

Para obtener una explicación completa sobre las colas sin bloqueo y el IPC, puede marcar CoralQueue.

Descargo de responsabilidad: Soy uno de los desarrolladores de CoralQueue.