Php 当与pcntl_fork()一起使用时,APC能否提高CLI脚本的速度?

Php 当与pcntl_fork()一起使用时,APC能否提高CLI脚本的速度?,php,apc,pcntl,Php,Apc,Pcntl,APC的工作原理是将PHP文件中的操作码存储在共享内存中。当PHP与web服务器(如Apache)一起使用时,共享内存的使用寿命很长。从命令行调用时,将为每个进程创建并销毁APC缓存。默认情况下,通信线路上禁用APC,可能是由于此原因 我有一个理论,如果PHP进程是分叉的(使用pcntl_fork()),那么使用APC会有好处,因为可能可以使用相同的操作码缓存。这可能只适用于分叉之后包含的文件 衡量这一点的最佳方法是什么?有人能对此进行测试或解释这一理论是否正确吗 <?php if (pc

APC的工作原理是将PHP文件中的操作码存储在共享内存中。当PHP与web服务器(如Apache)一起使用时,共享内存的使用寿命很长。从命令行调用时,将为每个进程创建并销毁APC缓存。默认情况下,通信线路上禁用APC,可能是由于此原因

我有一个理论,如果PHP进程是分叉的(使用
pcntl_fork()
),那么使用APC会有好处,因为可能可以使用相同的操作码缓存。这可能只适用于分叉之后包含的文件

衡量这一点的最佳方法是什么?有人能对此进行测试或解释这一理论是否正确吗

<?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,则始终返回false)
请注意,默认情况下,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 -dapc.enable_cli=1 test.php

real    0m0.252s
user    0m0.244s
sys     0m0.004s
在这种情况下,APC确实会对性能产生重大影响


使用pcntl_fork(),APC应该具有与在apache的mod_PHP或PHP fpm下运行多个PHP脚本完全相同的影响:如果多个子脚本包含相同的文件,则包含的文件将只被解析一次



在PHP5.5中,捆绑的opcache扩展取代了APC也优化了代码,因此它不仅会影响
要求的
性能,还会影响代码本身的性能。

听起来是可能的,但我认为除非您将单个脚本插入多个子进程并重复包含,否则您不会看到太多好处每一页上的文件。
$ time php -dapc.enable_cli=1 test.php

real    0m0.252s
user    0m0.244s
sys     0m0.004s