как работают скрученные/торнадо и так далее

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

(Имеет ли к этому какое-то отношение «неблокировка»?)


person Aaron Yodaiken    schedule 18.06.2010    source источник
comment
Взгляните на класс org.deftserver.web.IOLoop, если что-то неясно. (www.deftserver.org)   -  person Schildmeijer    schedule 10.10.2010


Ответы (1)


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

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

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

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

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

person Jean-Paul Calderone    schedule 18.06.2010
comment
Я добавил немного больше текста, обсуждающего блокировку и неблокировку. - person Jean-Paul Calderone; 18.06.2010