2012-04-08 9 views

Respuesta

15

En la mayoría de las situaciones al manejar solicitudes, está bloqueando o esperando algún recurso/condición externa. En este caso, está ocupando el hilo (por lo tanto, mucha memoria) sin hacer ningún trabajo.

Con servlet 3.0 puede atender miles de conexiones simultáneas, mucho más que los hilos disponibles. Piense en una aplicación que proporciona la descarga de archivos con un rendimiento limitado. La mayoría de las veces, sus subprocesos están inactivos porque están esperando para enviar el siguiente fragmento de datos. En servlets normales, no puede atender a más clientes que la cantidad de subprocesos HTTP, aunque la mayoría de las veces estos subprocesos están inactivos/inactivos.

En servlet 3.0 puede tener miles de clientes conectados con pocos hilos HTTP. Puede encontrar un ejemplo del mundo real en mi artículo: Tenfold increase in server throughput with Servlet 3.0 asynchronous processing inspirado por esta pregunta: Restrict download file bandwidth/speed in Servlet

es el hilo creado por startAsync algún modo más barato?

No hay hilos creados por startAsync! Simplemente le dice al contenedor del servlet: hola, aunque el método doGet/doPost finalizó, no he terminado con esta solicitud, por favor no cierre. Ese es el punto: probablemente no creará nuevo hilo por cada solicitud asincrónica. Aquí hay otro ejemplo: tienes miles de navegadores esperando un cambio en el precio de las acciones usando . En servlets estándar esto significaría: miles de subprocesos inactivos esperando algún evento.

Con servlet 3.0 puede mantener todas las solicitudes asíncronas esperando en un ArrayList o en alguna cola. Cuando llegue el cambio en el precio de las acciones, envíelo a todos los clientes uno tras otro. No se necesita más de un subproceso en este escenario, y todos los subprocesos HTTP son libres de procesar los recursos restantes.

+0

¡Gracias! Esto tiene sentido :) – Aivar

+0

... pero desafortunadamente todavía no está del todo claro para mí. Parece que me confundí por el ejemplo del que aprendí AsyncContext. Escribí otra pregunta sobre esto, tal vez también podría ver esto: http://stackoverflow.com/questions/10073392/whats-the-purpose-of-asynccontext-start-in-servlet-3-0 – Aivar

4

Con servlet 3.0 puede simplemente mantener todas las solicitudes asíncronas esperando en una ArrayList o en alguna cola El problema es esto. Aún necesita un nuevo hilo para procesar la solicitud y recoger la solicitud para finalmente enviar la respuesta. Así que liberamos hilos http pero tenemos que crear un hilo para procesar la solicitud

Cuestiones relacionadas