2012-02-18 19 views
7

¿Por qué motivos se elegirían varios procesos en varios subprocesos para implementar una aplicación en Java?¿Cuándo elegir varios procesos sobre subprocesos en Java?

Estoy refacturando una aplicación java más antigua que actualmente está dividida en varias aplicaciones más pequeñas (procesos) que se ejecutan en la misma máquina multi-core, comunicándose entre ellas mediante sockets.

Personalmente creo que esto debería hacerse usando hilos en lugar de procesos, pero ¿qué argumentos defenderían el diseño original?

Respuesta

9

yo (y otros, veo atribuciones abajo) puede pensar en un par de razones:

razones históricas

  • El diseño es de los días en que sólo se dispone de los hilos verdes y el original el autor/diseñador pensó que no funcionarían para él.

robustez y tolerancia a fallos

  • utilizar componentes que no es seguro para subprocesos, por lo que no se puede paralelizar withough recurrir a múltiples procesos.

  • Algunos componentes tienen errores y no desea que puedan afectar a más de un proceso. Digamos, si un componente tiene una fuga de memoria o de recursos que eventualmente podría obligar a un proceso a reiniciarse, entonces solo se verá afectado el proceso que usa el componente.

  • Corregir el multihilo sigue siendo difícil de hacer. Dependiendo de su diseño más difícil que el multiprocesamiento. Lo último, sin embargo, tampoco es demasiado fácil.

  • Puede tener un modelo en el que tenga un proceso de vigilancia que pueda supervisar activamente (y eventualmente reiniciar) procesos de trabajo bloqueados. Esto también puede incluir suspender/reanudar procesos, lo que no es seguro con los hilos (gracias a @Jayan para señalar).

Límites de recursos OS & de Gobierno

  • Si el proceso, utilizando un solo hilo, ya está utilizando todo el espacio de direcciones disponibles (por ejemplo, para aplicaciones de 32 bits en Windows 2GB), se podría necesitar distribuir trabajo entre procesos.

  • Limitar el uso de recursos (CPU, memoria, etc.) normalmente solo es posible por proceso (por ejemplo, en Windows puede crear objetos de "trabajo", que requieren un proceso por separado).

Consideraciones de Seguridad

  • se pueden ejecutar diferentes procesos utilizando diferentes cuentas (es decir, "usuarios"), lo que proporciona un mejor aislamiento entre ellos.

problemas de compatibilidad

  • Soporte de múltiples/diferentes versiones de Java: El uso de procesos diferentes personas se pueden utilizar diferentes versiones de Java para sus piezas de aplicación (si es requerido por las bibliotecas 3 ª parte).

transparencia de ubicación

  • Se podría (potencialmente) distribuir su aplicación a través de múltiples máquinas físicas, lo que aumenta aún más la escalabilidad y/o robustez de la aplicación (ver @Qwe's answer para más detalles/la idea original)
+0

excelente lista o argumentos, gracias! – wannabeartist

+0

+1 Cubre todo lo que podría haber enumerado. (Destacaría la gestión de recursos y los elementos de separación de privilegios; son cosas que no se pueden hacer sin procesos separados, aunque a veces en estos días se va más allá para separar máquinas virtuales). –

+0

+1 ¿La robustez incluye tolerancia a fallas? Al igual que algunos procesos, inician y miran otros procesos (Postgres hace algo así). – Jayan

6

Si decide usar los hilos, restringirá la aplicación para que se ejecute en una sola máquina. Esta solución no escala (o escala en cierta medida), siempre hay límites de hardware.

Y los diferentes procesos de comunicación a través de sockets se pueden distribuir entre las máquinas, por lo que podría agregar un número virtualmente ilimitado de ellos. Esto se escala mejor a costa de una comunicación lenta entre procesos.

Decidir qué enfoque es más adecuado es en sí mismo una tarea muy interesante. Y una vez que tome la decisión, no hay garantía de que se verá estúpida para sus sucesores en un par de años cuando los requisitos cambien o haya nuevo hardware disponible.

+0

Muy cierto. En este caso, la aplicación debe ejecutarse siempre en una sola máquina, pero generalmente es un punto muy válido a considerar. – wannabeartist

Cuestiones relacionadas