Меня интересует это больше, чем с академической точки зрения, а не с практической точки зрения; Я не планирую создавать производственный веб-сервер, чтобы конкурировать с nginx. Что мне интересно, так это то, насколько точно nginx работает так быстро. Главный ответ Google для этого - этот поток, но он просто ссылается на загадочное слайд-шоу и общее покрытие различных стратегий ввода-вывода. Все остальные результаты, по-видимому, просто описывают скорость nginx, а не причину.
Я пытался создать простой сервер erlang, чтобы попытаться конкурировать с nginx, но безрезультатно; nginx выиграл. Все, что делает мой сервер, - это порождает новый процесс для каждого запроса, использует этот процесс для чтения файла в сокет, затем закрывает файл и убивает поток. Это не сложно, но учитывая легкие процессы erlang и основную структуру aio, я думал, что он будет конкурировать, но nginx по-прежнему выигрывает со стабильным средним значением 300 мс при тяжелом стресс-тесте.
Что делает nginx, а не мой простой сервер? Моей первой мыслью было бы хранить файлы в основной памяти, а не бросать их между запросами, но кеш файловой системы уже делает это, поэтому я не думал, что это будет иметь большое значение. Я ошибся? Или мне чего-то не хватает?