Кстати, а можно узнать, почему выбор встроенного языка был остановлен именно
на перле? С одной стороны я вижу у Вас в коде сравнивание длины строки до
strncmp, а с другой стороны - перл. Этот пожиратель памяти.
Пока боролся с lighttpd обнаружил в нем полноценный встроенный Lua, хоть и
назывался он там mod_cml (cache makeup language), но был совершенно
полноценным встроенным языком. Синтаксис, конечно непривычный немного, но его
работа совершенно не сказывалась на результатах моих бенчмарков.
Статика и результат работы Lua выдавали одинаковое - порядка 5к запросов в сек
на относительно слабой машине.
Изначально я не хотел встраивать какой-либо язык, поскольку неблокирующая
архитектура сервера накладывает существенные ограничения на его использование.
Позже я пришёл к выводу, что часть неблокирующихся задач вполне можно писать
на встраиваемом языке. Ну и кроме того, можно сделать обработчик запроса
в виде нескольких callback'ов, которые будут вызыватся после долгой
операции - резолвинг, ответ другого сервера, базы данных и прочая.
Разумеется, все эти длительные операции должны делаться не стандартными
средствами (gethostbynmame, connect и прочая), а обрабатываться самим
nginx'ом в неблокирующимся режиме.
Выбирать язык мне было особо не из чего. php, ruby и python я не знаю,
про lua читаю второй раз, а перл знаю не плохо и представляю, как его
встраивать. Что касается пожирания памяти, то, на мой взгляд, это зависит
от использования. perl есть память не всегда.
А strncmp используется, потому что nginx вычисляет длины всех строк один раз
и хранит их. Кроме того, часть строк не оканчивается '\0'.
Игорь Сысоев
http://sysoev.ru