Tornado - это «относительно простая неблокирующая платформа веб-сервера, написанная на Python» - можете объяснить, что это значит? - PullRequest
18 голосов
/ 14 сентября 2009

Это, вероятно, глупый вопрос, но что такое «неблокирующий веб-сервер»? Все веб-серверы технически не блокируют, не так ли? в противном случае, как они могут обрабатывать одновременные соединения? Apache2 достигает этого, используя комбинацию fork () и pthreads. Чем именно Tornado (и Twisted тоже) отличаются? Они просто устанавливают несколько сокетов в неблокирующий режим, создают список FD (или эквивалентный), а затем зацикливают его одним большим вызовом select () sys?

Где бы вы использовали такие фреймворки и какие преимущества они могут дать вам по сравнению с Apache2 (или другими популярными серверами)? Спасибо

1 Ответ

12 голосов
/ 14 сентября 2009

Эта статья на EventMachine также может дать вам подсказку:

Погруженный в традицию разветвления / веб-серверы я нашел себе довольно удивлен, когда я присоединился к одному из исследовательские проекты в университете Ватерлоо пару лет назад: мы тестировали разные веб-серверы архитектуры, и лучшие исполнители были все управляемые событиями серверы.

Поскольку я приставал ко всем с вопросами, Я быстро понял, почему - в среда с сотнями тысяч запрашивает секунду, разветвление и контекст переключение связано с потоком управление стало непомерно дорогой (форк - худший исполнитель, так как он делает копию памяти на родителя обрабатывать каждый раз). Принимая во внимание, что сравнение, жесткий и весьма оптимизированный цикл обработки событий действительно светит когда дело доходит до производительности под тяжелые грузы.

...