Существует три вида «серверов» - разветвление, многопоточность и однопоточность (неблокирование). Все они, как правило, показывают цикл, как вы показываете, разница в том, что происходит, когда нужно что-то обслуживать.
Служба разветвления - только это. Для каждого запроса вызывается fork (), создавая новый дочерний процесс, который обрабатывает запрос, затем завершает работу (или остается активным, чтобы обработать последующие запросы, в зависимости от дизайна).
Служба многопоточности похожа на службу разветвления, но вместо совершенно нового процесса создается новый поток для обслуживания запроса. Как и вилки, иногда потоки остаются для обработки последующих запросов. Разница в производительности и занимаемой площади - это просто разница потоков и вилок. В зависимости от использования памяти, которое не обслуживает клиента (и подвержено изменениям), обычно лучше не клонировать все адресное пространство. Единственная сложность здесь - это синхронизация.
Сервер с одним процессом (он же однопоточный) будет разветвляться только один раз для демонизации. Он не будет порождать новые потоки, он не порождает дочерние процессы. Он продолжит опрос () сокета, чтобы выяснить, когда дескриптор файла готов к приему данных или имеет данные, доступные для обработки. Данные для каждого соединения хранятся в своей собственной структуре, идентифицируемой различными состояниями (запись, ожидание ACK, чтение, закрытие и т. Д.). Это может быть чрезвычайно эффективный дизайн, если все сделано правильно. Вместо того, чтобы блокировать несколько дочерних элементов или потоков во время ожидания выполнения работы, у вас есть один запрос на обслуживание цикла процесса и цикла, когда они готовы.
Существуют случаи, когда однопоточные службы порождают несколько потоков, однако дополнительные потоки не работают для обслуживания входящих запросов, можно (например) настроить локальный сокет в потоке, который позволяет администратору получить статус все соединения.
Небольшое приближение к поиску неблокирующего http-сервера приведет к некоторым интересным раскрученным веб-серверам, написанным как вызовы гольф-кода.
Короче говоря, разница в том, что происходит, когда вводится бесконечный цикл, а не только бесконечный цикл:)