2010-06-18 9 views
5

Ich verstehe, dass sie in gewisser Weise unabhängig von der Erstellung eines Threads pro Benutzer funktionieren. Wie genau funktioniert das?wie funktionieren twisted/tornado et cetera

(? Does 'non-blocking' hat etwas damit zu tun)

+0

Werfen Sie einen Blick auf die Klasse org.deftserver.web.IOloop, wenn die Dinge noch unklar sind. (www.deftserver.org) – Schildmeijer

Antwort

6

Von der Twisted-Dokumentation:

Der Reaktor ist der Kern der Ereignisschleife innerhalb Verdreht - die Schleife, die Laufwerke Anwendungen mit Twisted. Die Ereignisschleife ist ein Programmierkonstrukt, das auf Ereignisse oder Nachrichten in einem Programm wartet und diese versendet. Er ruft einen internen oder externen "Ereignisprovider" auf, der normalerweise blockiert, bis ein Ereignis eintrifft, und ruft dann den entsprechenden Ereignishandler auf ("Versendet das Ereignis"). Der Reaktor bietet grundlegende Schnittstellen zu einer Reihe von Diensten, einschließlich Netzwerkkommunikation, Threading und Ereignisverteilung.

Siehe auch http://en.wikipedia.org/wiki/Event_loop

Non-Blocking, dass bezieht sich, wenn Sie Ereignisse behandeln möchten auf mehr als eine Buchse (oder, allgemeiner, von mehr als zwei von jeder Art von Ereignisquelle) in Ein einzelner Thread, Sie können nicht blockierende Operationen verwenden, um diese Ereignisse zu behandeln. Wenn Sie einen blockierenden Lesevorgang für den ersten Socket ausführen, können Sie erst dann vom zweiten Socket lesen, wenn einige Bytes auf dem ersten Socket ankommen. Dies funktioniert nicht sehr gut, da Sie nicht wirklich wissen können, welcher Socket Bytes zuerst lesen wird. Stattdessen verwenden Sie etwas wie select (ausführlicher auf der oben verlinkten Wikipedia-Seite beschrieben), um Ihnen mitzuteilen, welcher Socket über Bytes verfügt, und lesen sie dann von diesem Socket ohne zu blockieren.

Dies alles bedeutet, dass Sie Ereignisse aus einer beliebigen Anzahl von Ereignisquellen nacheinander bearbeiten können, wodurch der Eindruck entsteht, dass alle gleichzeitig behandelt werden.

+0

Richtig, aber wie funktioniert Non-Blocking in der Event-Schleife? –

+0

Ich habe ein bisschen mehr Text hinzugefügt, in dem Blocking vs Non-Blocking diskutiert wird. –