Сервер, прослушивающий порт 80, НЕ ДОЛЖЕН обрабатывать несколько процессов. Простые демоны TCP старших лет могли обрабатывать только одно соединение за раз. Вы можете эмулировать это поведение, имея такую программу, как netcat
прослушивание определенного порта и попытка подключить к нему две машины. Один войдет, другой отскочит без связи. Эти демоны в основном бесполезны, поэтому вы их больше не видите.
Для чего-то вроде веб-сервера это прослушивание непосредственно через порт. Следует иметь в виду, что он находится поверх библиотеки сокетов операционной системы. Когда новое соединение установлено, библиотека сокетов передает совершенно новый сокет программному обеспечению веб-сервера. На этом этапе программное обеспечение веб-сервера имеет несколько опций.
Одна возможность состоит в том, что он передает объект-сокет новому потоку в том же процессе. Всякий раз, когда связь происходит через этот сокет, этот поток будет обрабатывать его. Родительский процесс опосредует, какие потоки активны в любой момент времени, что может быть много.
Другая возможность состоит в том, что он запускает новый процесс и передает объект сокета процессу. Насколько я понимаю, теперь дело за системой сокетов операционной системы, обеспечивающей связь между этими дочерними процессами и их целями. Родительский процесс все еще имеет некоторый контроль над процессами, такими как уничтожение зависших и других межпроцессных взаимодействий.
Какой из этих подходов более эффективен, зависит от операционной системы. IIRC, Apache может работать в любом режиме.
По сути, библиотека сокетов обеспечивает уровень параллельной обработки веб-серверу. Он может обрабатывать несколько одновременных подключений, активно передавая данные, одновременно принимая новые подключения.
Для браузера, который может ускорить несколько попыток подключения к веб-серверу, чтобы сократить время загрузки, параллелизм также применяется на стороне браузера, это хорошая и замечательная вещь. Браузер отслеживает состояние страницы во время загрузки, и множественные попытки подключения, которые она раскручивает, являются частью процесса.
recv()
в каждом процессе.