Tornado - это “относительно простой, неблокирующий фреймворк веб-сервера, написанный на Python” - можете несколько объяснить, что это значит?
Вопрос
Вероятно, это глупый вопрос, но что именно представляет собой "неблокирующий веб-сервер"?Все веб-серверы технически неблокируемы, не так ли?иначе как бы они могли обрабатывать одновременные подключения?Apache2 достигает этого, используя комбинацию fork() и pthreads.Чем именно отличаются Tornado (и Twisted тоже)?Они просто переводят кучу сокетов в режим без блокировки, создают список FD (или эквивалент), а затем перебирают это одним большим системным вызовом select ()?
Где бы вы использовали подобный фреймворк и какие преимущества они могут вам дать по сравнению с Apache2 (или другими популярными серверами)?Спасибо
Решение
Это статья о EventMachine может также дать вам подсказку:
Погруженный в традицию разветвления / я обнаружил, что многопоточные веб-серверы довольно удивлен, когда пару лет назад присоединился к одному из исследовательских проектов в Университете Ватерлоо:мы проводили сравнительный анализ различных архитектур веб-серверов , и лучшими исполнителями были все серверы, управляемые событиями.
Поскольку я приставал ко всем с вопросами, Я быстро понял почему - в среде с сотнями тысяч запросов в секунду, разветвление и контекст переключение, связанное с потоком управление становится непомерно сложным дорого (fork является худшим исполнителем, так как он каждый раз копирует память в родительский процесс).Принимая во внимание, что для сравнения, сжатый и высоко оптимизированный цикл обработки событий действительно хорош когда дело доходит до производительности при больших нагрузках.