Может ли APC повысить скорость выполнения CLI-скриптов при использовании с pcntl_fork ()?

APC работает, сохраняя коды операций из файлов PHP в общей памяти. Когда PHP используется с веб-сервером (например, Apache), общая память имеет долгую жизнь. Когда вызывается из командной строки, тогда кеш APC создается и уничтожается для каждого процесса. По умолчанию APC отключается по умолчанию, вероятно, из-за этого.

У меня есть теория, что преимущества использования APC будут pcntl_fork() если PHP-процесс будет разветвлен (с pcntl_fork() поскольку, возможно, используется один и тот же кеш-код операции. Это может применяться только к файлам, включенным после fork.

Каков наилучший способ проверить это? Может ли кто-либо проверить это или объяснить, правильна ли теория или нет?

 <?php if (pcntl_fork()) { // parent include 'huge-file.php'; } else { // child sleep(1); // stop race condition include 'huge-file.php'; // will this use APC's cache? } 

APC оказывает влияние на режим CLI в двух случаях:

  • Один и тот же файл включается повторно, либо одним и тем же скриптом (например, файл, содержащий некоторый кеш данных), либо несколькими процессами
  • Вы используете apc_fetch () (всегда возвращает false, если apc отключен)

Обратите внимание, что APC отключает себя в CLI по умолчанию; вы должны включить его с apc.enable_cli=1 .

Вот быстрый тест:

 <?php for ($i = 0; $i < 1000; ++$i) { // cache.php contains the output of 'var_export(get_defined_constants(true))' require 'cache.php'; } 

Результат без apc:

 $ time php test.php real 0m1.219s user 0m1.208s sys 0m0.008s 

Результат с помощью apc:

 $ time php -dapc.enable_cli=1 test.php real 0m0.252s user 0m0.244s sys 0m0.004s 

В этом случае APC оказывает значительное влияние на производительность.


С помощью pcntl_fork () APC должен иметь точно такое же влияние, как запуск нескольких PHP-скриптов в mod_php apache или php-fpm: если несколько дочерних скриптов содержат одни и те же файлы, включенные файлы будут обрабатываться только один раз.


В PHP 5.5 добавленное расширение opcache, заменяющее APC, также оптимизирует код, поэтому это должно не только влиять на производительность, но и производительность самого кода.