gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:56:06 25 4
gpt4 key购买 nike

APC 的工作原理是将来自 PHP 文件的操作码存储在共享内存中。当 PHP 与 Web 服务器(例如 Apache)一起使用时,共享内存的生命周期很长。当从命令行调用时,将为每个进程创建和销毁 APC 缓存。默认情况下,命令行上禁用 APC,可能是由于这个原因。

我有一个理论,如果 PHP 进程被 fork 了,使用 APC 会有好处(使用 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() (如果 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 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 应该与在 apache 的 mod_php 或 php-fpm 下运行多个 PHP 脚本产生完全相同的影响:如果多个子脚本包含相同的文件,则包含的文件将仅被解析一次。

    在 PHP 5.5 中,替换 APC 的捆绑 opcache 扩展也优化了代码,因此它不仅应该影响 require性能,还有代码本身的性能。

    关于php - 与 pcntl_fork() 一起使用时,APC 能否提高 CLI 脚本的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16732048/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com