Tornado est “un framework de serveur Web relativement simple, non bloquant, écrit en Python” - peut-on expliquer un peu ce que cela signifie?
Question
C'est probablement une question stupide, mais qu'est-ce qu'un "serveur Web non bloquant"? Tous les serveurs Web ne sont techniquement pas bloquants, n'est-ce pas? sinon, comment pourraient-ils gérer des connexions simultanées? Apache2 y parvient en utilisant une combinaison de fork () et de pthreads. En quoi exactement Tornado (et Twisted également) sont-ils différents? Doivent-ils simplement définir un tas de sockets en mode non-bocking, construire une liste FD (ou l’équivalent), puis boucler dessus avec un grand appel sys select ()?
Où utiliseriez-vous un tel framework et quels avantages peuvent-ils vous apporter par rapport à Apache2 (ou d’autres serveurs populaires)? Merci
La solution
Cet article sur EventMachine . peut également vous donner un indice:
Ancrés dans la tradition de la fourche / serveurs web filetés je me suis retrouvé plutôt surpris quand j'ai rejoint l'un des les projets de recherche à l'Université de Waterloo quelques années en arrière: nous ont comparé différents serveur Web architectures, et les plus performants ont été tous les serveurs événementiels.
Comme je harcelais tout le monde avec des questions, J'ai vite compris pourquoi - dans un environnement avec des centaines de milliers demande une seconde, forking et contexte commutation associée au fil la gestion devient prohibitive cher (fourche est le moins performant, comme il fait une copie de la mémoire sur le parent processus à chaque fois). Attendu que par comparaison, un serré et très optimisé boucle d'événements brille vraiment quand il s'agit de performance sous lourdes charges.