Tornado es & # 8220; un marco de servidor web relativamente simple y sin bloqueo escrito en Python & # 8221; ¿puede explicar algo lo que eso significa?
Pregunta
Esta es probablemente una pregunta estúpida, pero ¿qué es exactamente un "servidor web sin bloqueo"? Todos los servidores web son técnicamente sin bloqueo, ¿no es así? de lo contrario, ¿cómo podrían manejar conexiones simultáneas? Apache2 logra esto usando una combinación de fork () y pthreads. ¿En qué se diferencian exactamente Tornado (y Twisted también)? ¿Simplemente configuran un montón de sockets en modo sin bloqueo, crean una lista FD (o equivalente) y luego repiten eso con una gran llamada select () sys?
¿Dónde usaría un marco como estos, y qué ventajas pueden darle sobre Apache2 (u otros servidores populares)? Gracias
Solución
Este artículo en EventMachine también puede darte una pista:
Sumergido en la tradición de la bifurcación / servidores web roscados me encontré bastante sorprendido cuando me uní a uno de los proyectos de investigación en la universidad de Waterloo hace un par de años: nosotros estaban comparando diferentes servidores web arquitecturas, y los mejores artistas fueron todos los servidores controlados por eventos.
Mientras molestaba a todos con preguntas, Rápidamente me di cuenta de por qué, en un ambiente con cientos de miles solicita un segundo, bifurcación y contexto conmutación asociada con hilo la gestión se vuelve prohibitiva caro (tenedor es peor desempeño, como hace una copia de memoria en el padre proceso cada vez). Mientras que por comparación, un apretado y altamente Event-loop optimizado realmente brilla cuando se trata de rendimiento bajo cargas pesadas.