В типичном развертывании Unix PHP устанавливается как модуль, работающий внутри веб-сервера apache, который, в свою очередь, настроен на отправку HTTP-запросов одному из нескольких порожденных потомков.
В целях эффективности apache часто порождает эти процессы заранее (предварительно разветвляя их) и обслуживает их, чтобы они могли отправлять более одного запроса и экономить накладные расходы на запуск процесса для каждого запроса. что приходит.
PHP работает по принципу запуска каждого запроса в чистой среде; Переменные скрипта не сохраняются между загрузками страниц. (Сравните это с mod_perl или python, где приложения часто обнаруживают незначительные ошибки из-за неожиданного похмелья состояния).
Это означает, что типичный ресурс, выделенный сценарием PHP, будь то дескриптор изображения для GD или соединение с базой данных, будет освобожден в конце запроса.
Некоторые ресурсы, в частности соединения с базами данных Oracle, устанавливаются довольно дорого, поэтому желательно как-то кэшировать это соединение между отправленными веб-запросами.
Введите постоянные ресурсы.
Способ, которым они работают, заключается в том, что любой данный дочерний процесс apache может поддерживать ресурс за рамками запроса, регистрируя его в «постоянном списке» ресурсов. Постоянный список не очищается в конце запроса (внутренне известный как RSHUTDOWN). Когда вы используете функцию pconnect, она ищет запись постоянного списка для заданного набора уникальных учетных данных и возвращает ее, если она существует, или устанавливает новое соединение с этими учетными данными.
Если вы настроили apache для поддержки 200 дочерних процессов, вы должны ожидать, что с вашего веб-сервера будет установлено много подключений к компьютеру базы данных.
Если у вас много веб-серверов и один компьютер базы данных, вы можете прекратить загрузку своего компьютера базы данных намного больше, чем вы ожидали.
При использовании многопоточного SAPI постоянный список поддерживается для каждого потока, поэтому он должен быть поточно-ориентированным и иметь аналогичные преимущества, но применяется обычное предостережение о том, что PHP не рекомендуется использовать в многопоточном SAPI - тогда как PHP сам по себе является поточно-ориентированным так много библиотек, которые он использует, могут иметь собственные проблемы безопасности потоков и вызывать у вас немало головных болей.