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

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

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

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

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

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

В том числе и за счет этого, т.к. fork это достаточно "дорогая" (и следовательно медленная) операция.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@galliard
fastcgi - что-то вроде сервера, который слушает определенный сокет. Он держит пул процессов (воркеров), которые принимают запросы, обрабатывают, возвращают ответ и ждут дальше запроса.


Вот в этой фразе замени fastcgi на php-fpm и будет правильно. А fastcgi - это технология обработки запроса, по которой каждый воркер крутится в бесконечном цикле, обрабатывая в каждой своей итерации по одному запросу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы