Веб-сервер должен обрабатывать параллельные соединения. Есть много способов сделать это, некоторые из них:
Процесс для каждого соединения.
Процесс для каждого соединения и готовый к использованию пул процессов.
Поток для каждого соединения.
Поток для каждого соединения и готовый к использованию пул потоков.
Один процесс, обрабатывающий каждое событие (принятое соединение, доступные для чтения данные, может писать клиенту,...) в обратном вызове.
Некоторая комбинация из вышеперечисленного.
...
В конце концов, различие заканчивается тем, как вы сохраняете каждое состояние соединения (явно в структуре контекста, неявно в стеке, неявно в продолжении,...) и как вы планируете между подключениями (пусть ОС планировщик сделать это, позволить примитивам опроса ОС сделать это,...).
Ответ 3
Управляемый событиями способ направлен на решение проблемы C10K. Он превращает традиционную "модель push" в "модель pull" для создания неблокирующего события ввода-вывода. Проще говоря, архитектура, управляемая событиями, не позволяет создавать дополнительные потоки и потоки изменения контекста потока, и обычно заканчивается лучшей производительностью и меньшим потреблением ресурсов.