Сорри за небольшой оффтоп, ради интереса спрашиваю. Процесс
проксирования апачу (грубо): приходит запрос nginx-у, worker форкается,
открывает апачевый сокет, пишет туда запрос, потом читает оттуда ответ
и отсылает его запрашиваемому (ч-з свой сокет)?
По сути да, за тем исключением что не форкается, используется
асинхронный i/o.
немного поправлю - не асинхронный i/o, а мультиплексирование.
http://www.lexa.ru/nginx-ru/msg03999.html
учитывая что на бсд sendfile'у можно сказать быть неблокируемым, а для
линукса я пытаюсь пропатчить ядро для этого, то ничего плохого в
отсутсвии AIO нет. Смотрел на реализацию linux-aio-sendfile у lighttpd
- файл мапится в shared memory и оттуда sendfile()ится. В результате ни
о каком zero copy речи нет. Как плюс - можно отдавать один и тот же
кусок нескольким клиентам; не возникает блокирующихся на диске sendfile
тк нужный кусок уже в памяти. Из минусов - raw perfomanse ниже. wget на
гигабитном линке показал ~47МБайт у lighttpd с linux-aio-sendfile и
~63мбайт у nginx sendfile при отдаче фильмов с диска.