PHP中连续调用sleep()总耗时为各参数之和,因单线程同步执行,不存在覆盖或并发;usleep()单位为微秒,time_nanosleep()为秒+纳秒;信号中断和SAPI超时更易导致线上异常。
PHP中连续调用sleep()是累加的,不是覆盖或并发
多个sleep()按顺序执行,总耗时等于各参数之和。PHP是单线程同步执行的,不存在“叠加延时”这种并发概念——它只是老老实实一个接一个地等。
常见误解是以为第二次sleep(2)会“覆盖”第一次的sleep(3),实际完全不会。只要没被中断(如信号、超时),每个sleep()都独立完成。
-
sleep(3); sleep(2);→ 总耗时约5秒(忽略函数调用开销) - 中间插了
echo或数据库查询?不影响sleep()计时,它们各自算各自的 - 如果脚本设置了
max_execution_time,总延时超过该值会直接Fatal error: Maximum execution time exceeded
用usleep()和time_nanosleep()要注意精度和单位
毫秒级以下延时不能靠sleep()(最小单位是秒),得换函数。但单位容易搞错,而且行为有差异:
-
usleep(1500000)→ 睡1.5秒(参数单位是微秒) -
time_nanosleep(1, 500000000)→ 睡1秒500毫秒(参数是sec+nano sec) -
usleep()在Windows上可能不精确,某些旧版本甚至只支持到10ms粒度 -
time_nanosleep()在部分Linux系统上可能被信号中断,返回false并设置$errno,需手动重试
循环里反复sleep()容易触发超时或被SAPI截断
Web环境(如Apache、FPM)对单次请求有硬性时间限制,连续延时极易撞墙。比如:
立即学习“PHP免费学习笔记(深入)”;