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

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

У меня есть теория, что использование APC будет полезным, если процесс PHP разветвлен (с pcntl_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?
}

1 ответ

Решение

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 или php-fpm apache: если несколько дочерних сценариев содержат одни и те же файлы, включенные файлы будут проанализированы только один раз.


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

Другие вопросы по тегам