php阻塞实现
PHP 阻塞实现方法
在 PHP 中实现阻塞操作通常涉及同步执行、等待外部资源或延迟执行。以下是几种常见的阻塞实现方式:
sleep 函数
使用 sleep 函数可以让当前脚本暂停执行指定的秒数。该函数会阻塞整个进程直到时间结束。
sleep(5); // 阻塞 5 秒
usleep 函数
usleep 函数与 sleep 类似,但以微秒为单位进行阻塞。
usleep(500000); // 阻塞 0.5 秒(500000 微秒)
文件锁定
通过 flock 函数可以实现文件锁阻塞,直到其他进程释放锁。
$fp = fopen("lockfile.txt", "w+");
if (flock($fp, LOCK_EX)) { // 阻塞直到获取排他锁
// 执行代码
flock($fp, LOCK_UN); // 释放锁
}
fclose($fp);
数据库查询阻塞
某些数据库操作(如事务或行锁)可能导致阻塞,例如 MySQL 的 SELECT ... FOR UPDATE。
$pdo->beginTransaction();
$stmt = $pdo->prepare("SELECT * FROM table WHERE id = 1 FOR UPDATE");
$stmt->execute(); // 可能阻塞直到其他事务释放锁
Swoole 协程阻塞
使用 Swoole 扩展时,协程可以通过 Co::sleep 实现非阻塞的“伪阻塞”,底层实际是协程调度。
Co\run(function() {
Co::sleep(1); // 协程阻塞 1 秒,但不阻塞进程
});
注意事项
- PHP 是单线程同步模型,阻塞操作会停止整个脚本执行。
- 长时间阻塞可能导致超时(需调整
max_execution_time)。 - 高并发场景建议用异步方案(如 Swoole、ReactPHP)替代阻塞操作。
应用场景
- 定时任务延迟执行
- 资源竞争控制(如文件/数据库锁)
- 简单轮询检查(需配合
sleep)
对于需要高性能的场景,建议探索非阻塞 I/O 或事件驱动架构。







