как работают витые / торнадо и так далее - PullRequest
5 голосов
/ 18 июня 2010

Я понимаю, что они работают не так, как создание потока для пользователя. Как именно это работает?

(имеет ли какое-либо отношение к неблокированию?)

1 Ответ

6 голосов
/ 18 июня 2010

Из витой документации:

Реактор является ядром цикла событий в Twisted - цикла, который управляет приложениями с использованием Twisted. Цикл событий - это программная конструкция, которая ожидает и отправляет события или сообщения в программе. Он работает путем вызова некоторого внутреннего или внешнего «провайдера событий», который обычно блокируется до прибытия события, а затем вызывает соответствующий обработчик события («отправляет событие»). Реактор обеспечивает основные интерфейсы для ряда служб, включая сетевую связь, многопоточность и диспетчеризацию событий.

См. Также http://en.wikipedia.org/wiki/Event_loop

Неблокирующая относится к тому, что если вы хотите обрабатывать события более чем в одном сокете (или, в более общем случае, из более чем двух источников любого типа) в одном потоке, вы можете не использовать блокирование операций для обработки этих событий. Если вы выполняете блокирующее чтение на первом сокете, вы не сможете читать со второго сокета, пока на первый не придет несколько байтов. Это не очень хорошо работает, так как вы не можете точно знать, какой сокет будет иметь байты для чтения в первую очередь. Вместо этого вы используете что-то вроде select (более подробно описано на странице Википедии, ссылки на которую приведены выше), чтобы сообщить вам, в каком сокете есть байты, а затем прочитать их из этого сокета без блокировки.

Все это означает, что вы можете обслуживать события из любого количества источников событий, один за другим, создавая видимость обработки их всех одновременно.

...