¿En qué se diferencian los subprocesos de una aplicación web basada en Java frente a la aplicación Java autónoma?

12

Soy bastante nuevo en Java y mi experiencia se limita a las aplicaciones basadas en web que se ejecutan en un contenedor web (Jboss en mi caso).

¿Estoy en lo cierto al decir que para aplicaciones web el contenedor web se encarga de los subprocesos múltiples? Si es así, ¿puedo introducir nuevas huellas en aplicaciones basadas en la Web? ¿Hay alguna ventaja al hacerlo y en qué escenario uno tendría que hacerlo?

    
pregunta kapricanon 12.06.2013 - 14:44

3 respuestas

20
  

¿Tengo razón al decir que, para las aplicaciones web, el contenedor web se encarga de los subprocesos múltiples?

La mayoría de los servidores web (Java y otros, incluido JBoss) siguen un modelo de "un subproceso por solicitud", es decir, cada solicitud HTTP se procesa en su totalidad por un solo subproceso. Este hilo a menudo pasará la mayor parte del tiempo esperando cosas como solicitudes de DB. El contenedor web creará nuevos hilos según sea necesario.

Algunos servidores (en el ecosistema de Java principalmente Netty ) realizan el manejo asíncrono de solicitudes, ya sea con un modelo de "un hilo hace todo" o algo más complejo. La idea básica es que tener muchos subprocesos en espera desperdicia recursos, por lo que trabajar de forma asíncrona puede ser más eficiente.

  

Si es así, ¿puedo introducir nuevas huellas en aplicaciones basadas en la Web?

Es posible, pero se debe hacer con mucho cuidado, ya que los errores (como las fugas de memoria o la falta de sincronización) pueden causar errores que son muy difíciles de reproducir o hacer que todo el servidor caiga.

  

¿Hay alguna ventaja al hacerlo y en qué escenario uno tendría que hacerlo?

Bueno, la ventaja es que puedes hacer cosas en paralelo. El uso de subprocesos para mejorar la velocidad de cálculo pura es algo que no debe hacer en un servidor web, ya que ralentizaría el manejo de otras solicitudes. Ese tipo de cosas se deben hacer en un servidor separado, probablemente utilizando algún tipo de cola de trabajos.

Un escenario legítimo para multiproceso en el contexto del manejo de una solicitud HTTP podría ser si necesita acceder a otros recursos de red, por ejemplo. Llame a varios servicios web diferentes. Si lo hace de una sola vez, debe esperar a que cada llamada termine por turno. Pero si usa varios subprocesos, el tiempo total de espera es solo el retraso de la única llamada más lenta.

    
respondido por el Michael Borgwardt 12.06.2013 - 15:14
2

En respuesta a tu pregunta:

  

¿En qué se diferencian los subprocesos en una aplicación web basada en Java frente a la aplicación Java autónoma?

No es diferente. Por lo general, las aplicaciones web de software se basan en que ya proporcionarán algunos subprocesos múltiples al hacer que cada nueva solicitud sea un subproceso. Puede usar / crear subprocesos como lo haría con cualquier otra aplicación.

De hecho, los subprocesos múltiples pueden darte aumentos drásticos de rendimiento si lo usas correctamente. Para tareas intensivas de E / S, como el acceso a la red y el acceso a la unidad de disco, el aumento de rendimiento casi siempre está garantizado. Para las tareas de computación intensiva, debe atenerse a la regla de un subproceso por núcleo en el servidor. Por ejemplo, si su núcleo tiene un procesador i7, debe atenerse a 7 subprocesos para realizar tareas informáticas.

En respuesta a tu pregunta:

  

¿Hay alguna ventaja al hacerlo y en qué escenario uno tendría que hacerlo?

Michael Borgwart dice que no debe hacer esto para mejorar la velocidad de cálculo. No estoy de acuerdo, ya que este artículo sugiere que los subprocesos múltiples pueden ayudar a proporcionar capacidad de respuesta cuando los usuarios necesitan una computación pesada tarea realizada En un lenguaje sencillo, los usuarios no tendrán que esperar tanto tiempo para completar tareas pesadas de computación con subprocesos múltiples.

Si pretende utilizar muchos subprocesos, sugiero el uso de un grupo de subprocesos. Esto reducirá la sobrecarga de crear subprocesos.

    
respondido por el SyntaxRules 14.10.2013 - 17:13
-1

Bueno, esta es una buena pregunta y creo que la mayoría de los desarrolladores que trabajan en el desarrollo de aplicaciones web no usan el multiproceso de forma explícita. El motivo es bastante obvio, ya que está utilizando un servidor de aplicaciones para implementar su aplicación, el servidor de aplicaciones administra internamente un grupo de subprocesos para las solicitudes entrantes.

Entonces, ¿por qué usar multiproceso explícitamente? ¿Qué necesita que un desarrollador de aplicaciones web se exponga a los subprocesos múltiples?

Cuando trabaja en una aplicación a gran escala en la que tiene que atender muchas solicitudes al mismo tiempo, es difícil atender cada tipo de solicitud de forma síncrona porque un tipo particular de solicitud podría haber estado procesando mucho, lo que podría reducir el rendimiento de su aplicación.

Tomemos un ejemplo donde una aplicación web después de atender un tipo particular de solicitud debe notificar a los usuarios por correo electrónico y SMS. Si lo hace de forma sincronizada con el subproceso de solicitud podría reducir el rendimiento de su aplicación web. Así que aquí viene el papel de mutlithreading. En tales casos, es aconsejable desarrollar una aplicación multiproceso independiente a través de la red que sea responsable del envío de correo electrónico y SMS únicamente.

    
respondido por el rags147 16.05.2015 - 23:04

Lea otras preguntas en las etiquetas