Задать вопрос

Как работает fastcgi в php и phpfpm?

Не очень понимаю, как точно работает fastcgi и phpfpm. Сейчас я себе это представляю так:
fastcgi - что-то вроде сервера, который слушает определенный сокет. Он держит пул процессов (воркеров), которые принимают запросы, обрабатывают, возвращают ответ и ждут дальше запроса.
Вот мне не понятно, что из себя представляют эти процессы. Насколько я знаю php анализируется, транслируется в байткод и потом запускается. Получается, в этих процессах крутится байткод? Или "разогретый" интерпретатор (хотя я не уверен, что понимаю, что значит "разогретый")? Если так, то чем это все отличается от php-cgi + opcache? Выигрыш только за счет того, что процесс каждый раз не запускается?
И чем точно различается встроенный php fastcgi от php fpm? Ну т.е. я понимаю, что он занимается более продвинутым управлением процессов, но чего не хватало обычному fastcgi php, чтобы с ним мог работать тот же nginx?
  • Вопрос задан
  • 2885 просмотров
Подписаться 7 Средний Комментировать
Решение пользователя Алексей Сундуков К ответам на вопрос (2)
alekciy
@alekciy
Вёбных дел мастер
php fastcgi

А что есть всроенный php fastcgi? Возможно речь про встроенный веб сервер?

Вот мне не понятно, что из себя представляют эти процессы. Насколько я знаю php анализируется, транслируется в байткод и потом запускается. Получается, в этих процессах крутится байткод?

Это обычные процессы уровня ОС (полученные через стандартный вызов fork). В их области памяти находится только сам интерпретатор. Мастер процесс принимает входящее соединение и отдает его на обработку соответствующему свободному рабочему процессу. Рабочий процесс поднимает с диска и каждый раз интерпретирует весь код скриптов которые затрагиваются этим запросом. Если специально ни какой кэшер оптокода подключен не был, то это делается на каждый запрос.

Выигрыш только за счет того, что процесс каждый раз не запускается?

В том числе и за счет этого, т.к. fork это достаточно "дорогая" (и следовательно медленная) операция.
Ответ написан