Причина, по которой mod_php менее эффективен, чем fastcgi php (php-fpm) - PullRequest
2 голосов
/ 13 июня 2011

Я вижу, что большинство ответов считают, что mod_php менее эффективен, потому что объем занимаемой памяти будет выше из-за обслуживания статических файлов, таких как этот .

Но у меня другое мнение о следующем:

На самом деле, секция кода разделяется между fork() редактируемыми процессами, поэтому предикат занимаемой памяти не должен храниться.

Единственная причина, по которой я могу думать, это то, что mod_phpне является потокобезопасным, поэтому веб-сервер может создавать подпроцессы только для каждого запроса.

В то время как в режиме fastcgi веб-сервер может повысить производительность за счет мультиплексирования трюков, что снижает накладные расходы fork().

Одним словом, недостатком mod_php является не отпечаток его памяти, а издержки fork(), но если mod_php может быть thread_safe, fork() не потребуется, и это будет наиболее эффективным решением дляобслуживать запросы.

Выше мое мнение, но я не уверен на 100%.

Это верно?

1 Ответ

2 голосов
/ 13 июня 2011

Форкирование довольно быстрое, и установки по умолчанию apache + mod_php также являются форком.(если не используется рабочий mpm).

Реальная причина (вид) такова:

Стандартный mod_php будет иметь достаточно большой процесс, потому что этот процесс содержит как php, так и все остальные.модули apache и т. д. Если php находится в отдельном процессе, процесс php может иметь более короткое время жизни и быстро передать результат обратно в apache после завершения PHP.

Другая причина(как вы упомянули) в том, что PHP не касается запросов не-php.

Тот факт, что вы можете переключиться на рабочий mpm при использовании FastCGI, является просто бонусом;но это повышает эффективность.

В целом, с этими типами проектов вы всегда должны стараться сделать процессы apache и php максимально короткими, и их разделение помогает.

Но да .. форки очень быстрые, и в некоторых конструкциях они могут работать лучше, чем Threads в Linux (нет источника, я просто помню, как читал это).Я считаю, что для систем типа веб-серверов системы, основанные на шаблонах Reactor, работают еще лучше.NGinx и Varnish являются яркими примерами этого.

...