Php 当与pcntl_fork()一起使用时,APC能否提高CLI脚本的速度?
APC的工作原理是将PHP文件中的操作码存储在共享内存中。当PHP与web服务器(如Apache)一起使用时,共享内存的使用寿命很长。从命令行调用时,将为每个进程创建并销毁APC缓存。默认情况下,通信线路上禁用APC,可能是由于此原因 我有一个理论,如果PHP进程是分叉的(使用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
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启用它。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