PHP 纤维(Fiber)
探索PHP 8.1 Fiber实现轻量级协作式多任务。 · 难度:入门 · +15XP
什么是Fiber?
Fiber(纤维)是PHP 8.1引入的轻量级并发机制,允许实现协作式多任务处理。与传统的进程或线程不同,Fiber在同一个线程内进行任务切换,由开发者显式控制,非常适合I/O密集型操作。
基本概念
- Fiber:一个可暂停和恢复的执行单元
- suspend:暂停当前Fiber,将控制权交还给调用者
- resume:恢复被暂停的Fiber继续执行
简单示例
\$fiber = new Fiber(function (): void {
echo "Fiber开始
";
Fiber::suspend(); // 暂停
echo "Fiber恢复
";
});
echo "主程序1
";
\$fiber->start(); // 启动Fiber,输出"Fiber开始"
echo "主程序2
";
\$fiber->resume(); // 恢复Fiber,输出"Fiber恢复"
echo "主程序3
";
// 输出顺序:主程序1 -> Fiber开始 -> 主程序2 -> Fiber恢复 -> 主程序3
传递数据
可以在suspend和resume之间传递数据。
\$fiber = new Fiber(function (\$initial): void {
\$value = Fiber::suspend(\$initial);
echo "收到:\$value
";
});
\$result = \$fiber->start('开始值');
echo "返回:\$result
"; // 输出:返回:开始值
\$fiber->resume('新值'); // 输出:收到:新值
应用场景
Fiber特别适合异步I/O操作,如数据库查询、HTTP请求等。在非阻塞框架(如Amphp)中广泛使用。
练习提示
修改下方代码,创建一个Fiber,让它执行循环输出1到3,每次输出后暂停,由主程序恢复。确保输出顺序正确。