Tornado ist „ein relativ einfacher, nicht-blockierenden Web-Server-Framework in Python geschrieben“ - kann etwas erklären, was das bedeutet?
Frage
Dies ist wahrscheinlich eine dumme Frage, aber was genau ist ein „non-blocking Web-Server“? Alle Web-Server technisch nicht blockierend sind, Arent sie? sonst wie könnten sie umgehen gleichzeitige Verbindungen? Apache2 erreicht dies eine Kombination aus Gabel () und pthreads. Wie genau sind Tornado (and Twisted auch) anders? Sie setzen sie nur ein Bündel von Sockets nicht-bocking Modus, bauen eine FD-Liste (oder gleichwertig), und dann die Schleife über die mit einem großen select () sys Anruf?
Wo würden Sie einen Rahmen wie diese verwenden, und welche Vorteile können sie Ihnen über Apache2 (oder anderen beliebten Server)? Dank
Lösung
Das Artikel rel="nofollow auf eventmachine Sie können auch einen Hinweis geben:
Eingetaucht in der Tradition von Forking / Gewinde Web-Server fand ich mich eher überrascht, als ich kam einer von die Forschungsprojekte an der Universität ein paar Jahre Waterloo zurück: wir wurden Benchmarking verschiedenen Web-Server Architekturen und Top-Performer waren alle ereignisgesteuerten Server.
Wie ich jeder mit Fragen bedrängt, Ich wurde schnell klar, warum - in einem Umwelt mit Hunderttausenden fordert einen zweiten, gabelt und Kontext Schalten mit Thread zugeordnet Management werden unerschwinglich teuer (Gabel ist schlechtesten ab, wie es hat eine Speicherkopie auf dem übergeordneten verarbeiten jedes Mal). während durch Vergleich, eine dichte und hoch optimierte Event-Loop wirklich glänzt wenn es um die Leistung unter schwere Lasten.