php8.1引入的新特性 Fiber【纤程】
php8.1 引入的新特性 Fiber【纤程】是一种轻量级的协程实现,它允许在一个线程内实现非常高效的多任务处理。以下是 Fiber 的一些核心特性和基本用法:
一:Fiber 的核心特性:#
- 非阻塞:Fiber 允许在函数执行过程中
暂停
和恢复
,而无需阻塞主线程,从而管理并发操作。 - 可暂停与恢复:在代码执行中,可以随时暂停当前 Fiber 的运行,并在稍后恢复。
- 独立栈:每个 Fiber 拥有独立的栈空间,不会影响其他 Fiber 或主线程的运行。
二:Fiber 的基本用法:#
Fiber 可以通过 Fiber
类来创建和管理。以下是 Fiber 的一些基本操作:
- 创建 Fiber:通过
new Fiber(callable $callback)
创建一个新的 Fiber 实例,其中$callback
是一个可调用的函数或闭包。 - 启动 Fiber:使用
Fiber::start()
方法启动 Fiber,该方法会执行 Fiber 直到遇到第一个Fiber::suspend()
调用。 - 暂停 Fiber:在 Fiber 内部,可以使用
Fiber::suspend(mixed $value = null)
方法暂停执行,并可选地返回一个值给外部。 - 恢复 Fiber:使用
Fiber::resume(mixed $value = null)
方法恢复 Fiber 的执行,并可选地传递一个值给 Fiber。 - 抛出异常:可以使用
Fiber::throw(Throwable $exception)
向 Fiber 抛出一个异常以恢复其执行。
案例:
<?php
$fiber = new Fiber(function (): void {
echo 'fiber is start now ' . PHP_EOL;
// 使纤程暂停,并抛出值 ‘suspend value’,可以被外部接收
$value = Fiber::suspend('suspend value'); // 接收到 first
echo 'fiber is resume now ' . PHP_EOL;
// 第二次暂停
$value = Fiber::suspend("the second time"); // 接收到 second
echo 'fiber is finish now ' . PHP_EOL;
});
// 纤程开始执行,并且拿到暂停时抛出的值
echo "启动 Fiber...\n";
$result = $fiber->start(); // fiber is start now
echo "Fiber 暂停时返回:$result\n"; // Fiber 暂停时返回:suspend value
echo "恢复 Fiber...\n";
$fiber->resume('恢复时的传递值'); // fiber is resume now
//输出结果
启动 Fiber...
fiber is start now
Fiber 暂停时返回:suspend value
恢复 Fiber...
fiber is resume now
fiber is finish now
作者:Carver-大脸猫
出处:https://www.cnblogs.com/carver/articles/18588252
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
转载请注明原处
本文来自博客园,作者:Carver-大脸猫,转载请注明原文链接:https://www.cnblogs.com/carver/articles/18588252
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现