PHP как модуль thttpd против CGI с точки зрения использования памяти
Я планирую использовать php во встроенной среде. Наш текущий веб-сервер - thttpd. Сейчас я рассматриваю два варианта: запускать ли он как cgi или как модуль SAPI. Я знаю, что CGI имеет преимущество с точки зрения безопасности. Но если мы хотим использовать php в качестве cgi, экземпляр php должен загружаться в память для каждого запроса.
Я попытался скомпилировать его как модуль SAPI thttpd, и я заметил, что использование памяти thttpd, в частности, rss, не увеличивается по мере увеличения количества запросов.
Кто-нибудь может объяснить, как thttpd загружает php? Он загружается только один раз и остается резидентным в памяти, пока запущен thttpd? Если это так, мы можем рассмотреть это как альтернативу cgi.
Выполняет ли он многопоточность, т. Е. Если несколько запросов HTTP одновременно? или он обрабатывает запрос по одному?
Есть ли хорошая документация, обсуждающая поведение php как модуля thttpd?
1 ответ
У меня нет опыта работы с thttpd, но вот несколько советов:
- движок PHP является поточно-ориентированным, но некоторые расширения - нет, поэтому обычно люди избегают использовать его в многопоточной среде и предпочитают метод "один процесс - один запрос".
- да, обычно модули веб-сервера (например, Apache mod_*) работают постоянно, но большой плюс для PHP заключается в том, что для каждого запроса ему нужно анализировать исходный файл (или даже несколько исходных файлов, если вы используете include / require). Вы можете сократить это, используя что-то вроде APC, который кэширует проанализированную версию файлов.
- Существует также протокол FastCGI, который вы, возможно, захотите посмотреть - по сути, он представляет собой пересечение между модулем и CGI-решением - он раскручивает пару процессов, каждый процесс содержит один экземпляр проблемы CGI (в данном случае PHP).) и использует их для обработки запросов. Экземпляры перерабатываются (т. Е. Они могут обрабатывать несколько запросов один за другим).