news 2026/4/18 3:25:44

PHP 脚本的 CPU 执行时间的庖丁解牛

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP 脚本的 CPU 执行时间的庖丁解牛

“PHP 脚本的 CPU 执行时间” 是理解 PHP 性能、超时机制、资源消耗的核心概念。它不等于脚本总运行时间,而是仅统计 CPU 实际工作的时间(用户态 + 内核态),排除 I/O 等待、睡眠等挂起时间。


一、定义:什么是 CPU 执行时间?

  • CPU 执行时间= 进程在 CPU 上实际运行的时间(单位:秒);
  • 包含:
    • 用户态时间(User Time):执行 PHP OPcode、C 扩展代码;
    • 内核态时间(System Time):系统调用(如mallocwrite)消耗的 CPU。
  • 不包含
    • I/O 等待(如file_get_contents等网络响应);
    • 进程睡眠(如sleep());
    • 被调度器挂起(如高负载时等待 CPU)。

📌类比

  • 总时间= 做饭总耗时(洗菜 5min + 等水烧开 10min + 炒菜 3min);
  • CPU 时间= 仅“动手操作”时间(洗菜 5min + 炒菜 3min = 8min)。

二、测量方式:如何获取 CPU 时间?

1.getrusage()(最精准)
// 开始$ru_start=getrusage();// 执行代码for($i=0;$i<1000000;$i++){sqrt($i);}// 结束$ru_end=getrusage();// 计算 CPU 时间(秒)$user_time=($ru_end['ru_utime.tv_sec']-$ru_start['ru_utime.tv_sec'])+($ru_end['ru_utime.tv_usec']-$ru_start['ru_utime.tv_usec'])/1000000;$sys_time=($ru_end['ru_stime.tv_sec']-$ru_start['ru_stime.tv_sec'])+($ru_end['ru_stime.tv_usec']-$ru_start['ru_stime.tv_usec'])/1000000;echo"CPU 时间: ".($user_time+$sys_time)."s\n";
2.microtime(true)vs CPU 时间
$start_wall=microtime(true);// 总时间(wall-clock)$start_cpu=getrusage();// CPU 时间sleep(2);// 挂起 2 秒$end_wall=microtime(true);$end_cpu=getrusage();echo"总时间: ".($end_wall-$start_wall)."s\n";// ≈2secho"CPU 时间: ".cpu_time_diff($start_cpu,$end_cpu)."s\n";// ≈0s

结论sleep()增加总时间,但不增加 CPU 时间


三、与总运行时间的区别

操作总时间CPU 时间
for ($i=0; $i<1e7; $i++) {}≈0.3s≈0.3s
sleep(1)≈1.0s≈0.0s
file_get_contents('https://slow-api.com')≈5.0s≈0.05s(仅解析+拷贝)
mysqli_query("SELECT SLEEP(2)")≈2.0s≈0.01s(仅发送+接收)

🔑核心
I/O 操作的“等待时间”不计入 CPU 时间


四、影响 CPU 时间的因素

1.PHP 代码复杂度
  • 循环、递归、大数组操作 → 高 CPU 时间;
  • 示例:
    // O(n²) 操作for($i=0;$i<1000;$i++){for($j=0;$j<1000;$j++){$arr[]=$i*$j;}}
2.内置函数 vs 用户函数
  • 内置函数(C 实现)CPU 时间更低;
  • 用户函数(PHP 实现)有调用开销。
3.内存分配
  • 频繁new对象、大数组 → 触发malloc/GC → 增加内核态时间。
4.正则表达式
  • 复杂正则(如回溯)→ CPU 时间飙升;
  • 示例:preg_match('/(a+)+b/', str_repeat('a', 30))可能卡死。

五、工程意义:为什么必须理解 CPU 时间?

1.max_execution_time的真实作用
  • 该配置仅限制 CPU 时间(默认 30 秒);
  • sleep(60)不会超时,但for循环 31 秒会超时。
2.性能优化方向
  • 高 CPU 时间→ 优化算法、用内置函数、减少循环;
  • 低 CPU 时间但高总时间→ 优化 I/O(加缓存、连接池、异步)。
3.计费模型(Serverless)
  • AWS Lambda、Cloudflare Workers 按CPU 时间计费
  • I/O 等待不计费,但会增加用户感知延迟。
4.进程调度影响
  • CPU 时间高的进程,会被 Linux CFS 调度器降低优先级;
  • 可能导致“卡顿”其他请求(FPM 模型下)。

六、验证实验:亲手测量

实验 1:CPU 密集型
// cpu_test.php$start=getrusage();for($i=0;$i<5000000;$i++){md5($i);}$end=getrusage();echo"CPU 时间: ".($end['ru_utime.tv_sec']-$start['ru_utime.tv_sec'])."s\n";
timephp cpu_test.php# 输出: CPU 时间: 2s# real 0m2.100s (总时间)# user 0m2.000s (CPU 用户态)# sys 0m0.100s (CPU 内核态)
实验 2:I/O 密集型
// io_test.php$start=getrusage();file_get_contents('https://httpbin.org/delay/2');// 等待 2 秒$end=getrusage();echo"CPU 时间: ".($end['ru_utime.tv_sec']-$start['ru_utime.tv_sec'])."s\n";
timephp io_test.php# 输出: CPU 时间: 0s# real 0m2.100s# user 0m0.050s# sys 0m0.010s

七、总结

概念CPU 执行时间总运行时间
定义进程占用 CPU 的时间从开始到结束的钟表时间
包含用户态 + 内核态代码CPU 时间 + I/O 等待 + 睡眠
影响max_execution_time、计费用户感知延迟、超时
优化算法、内置函数、减少内存分配异步、缓存、连接池

对 PHP 程序员的终极启示
性能问题分两类

  • CPU 瓶颈→ 优化代码;
  • I/O 瓶颈→ 优化架构。

只有理解 CPU 时间,
才能精准定位瓶颈,
避免“用缓存优化 CPU 问题”的无效劳动。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 20:29:06

YOLO在轨道交通的应用:轨道异物入侵智能预警

YOLO在轨道交通的应用&#xff1a;轨道异物入侵智能预警 在高铁时速突破350公里、城市地铁网络日益密集的今天&#xff0c;一条铁轨上的小小障碍物&#xff0c;可能演变为一场重大安全事故。2018年某地因施工遗留钢轨未及时清理&#xff0c;导致列车紧急制动并延误数小时——这…

作者头像 李华
网站建设 2026/4/14 19:44:32

浙江html+css 5页

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…

作者头像 李华
网站建设 2026/4/10 20:11:48

为什么大模型时代,提示词是你必须掌握的“魔法咒语“?

文章探讨了在大模型时代提示词的重要性。简单任务无需复杂提示词&#xff0c;但复杂任务需要专业提示词来填补"指令"与"意图"间的鸿沟。提示词能充当"工作流经理"&#xff0c;将AI从聊天机器人转变为自动化生产线。专业提示词包含各种参数&#…

作者头像 李华
网站建设 2026/4/16 22:27:28

YOLO模型训练资源预约系统:避免多人抢占GPU

YOLO模型训练资源预约系统&#xff1a;避免多人抢占GPU 在一家智能制造企业的AI研发实验室里&#xff0c;三位工程师同时准备启动YOLOv8的训练任务。一人在调试产线缺陷检测模型&#xff0c;另一人优化物流分拣系统的识别精度&#xff0c;第三人则尝试迁移学习以适配新物料类别…

作者头像 李华
网站建设 2026/4/16 3:06:56

YOLO与gRPC协议集成:构建高性能内部通信链路

YOLO与gRPC协议集成&#xff1a;构建高性能内部通信链路 在智能制造、自动驾驶和智能安防等工业级视觉系统日益普及的今天&#xff0c;一个共同的技术挑战浮出水面&#xff1a;如何在保证高精度目标检测的同时&#xff0c;实现低延迟、高吞吐的跨模块通信&#xff1f;传统的基于…

作者头像 李华
网站建设 2026/4/15 17:05:47

基础-事务

一、MySQL基础在数据的世界里&#xff0c;就像银行系统中的一笔转账操作&#xff0c;我们不能接受"资金从A账户划出&#xff0c;但B账户未收到"的混乱局面。事务正是数据库中的"安全卫士"&#xff0c;确保数据操作的完整性与可靠性。当您在电商网站下单时&…

作者头像 李华