我已经阅读了关于SO的其他问题并且标题相似,但这不是这个问题的内容.我知道如何从另一个
PHP脚本执行
PHP脚本.问题是,当我这样做时,它使用了太多的CPU.我想知道如何减少这一点.
我有一个简单的类似前端控制器的脚本叫做index.php.它处理来自客户端的GET请求,并根据传递的“action”参数,将请求发送到适当的文件来处理它.例如,这是客户端请求:
xhttp.open("GET", serverURL + "?action=doSomething" + "&userID=" + user.ID + "&time=" + lastServerTime, true);
index.php有一个数组,它将“action”参数映射到适当的文件:
exec('php ' . $url_map[$action] . ' "' . $parameter1 . '"' . ' "' . $parameter2 . '" 2>&1', $output, $return_value);
出于测试目的,我创建了一个PHP脚本,除了测量CPU利用率并将其转储到日志文件之外什么都不做:
function varDumpToFile($parameter1) {
$file = 'log.txt';
$dump = $parameter1;
$output = print_r($dump, true);
file_put_contents($file, $output, FILE_APPEND | LOCK_EX);
}
varDumpToFile(`ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5`);
?>
这会生成一个如下所示的日志文件:
9.0 3123052 user /opt/cpanel/ea-php56/root/usr/bin/php cputest.php 10 147424 1537625595
显然,PHP脚本不应占用9%的CPU来执行.为了比较,我运行相同的脚本通过GET请求直接访问它:
0.1 3186198 user lsphp:ic_html/dev/php/cputest.php
0.1%更像是它.但是为什么从另一个PHP脚本调用这个PHP脚本会占用这么多CPU?是因为当我执行PHP时,我必须执行PHP的“新实例”,这有很多开销吗?如果是这样,有没有办法使用“已经运行”的PHP实例来执行PHP脚本?还是有另一种方法吗?