php8.1引入的新特性 Fiber【纤程】

php8.1 引入的新特性 Fiber【纤程】是一种轻量级的协程实现,它允许在一个线程内实现非常高效的多任务处理。以下是 Fiber 的一些核心特性和基本用法:

一:Fiber 的核心特性:#

  1. 非阻塞:Fiber 允许在函数执行过程中暂停恢复,而无需阻塞主线程,从而管理并发操作。
  2. 可暂停与恢复:在代码执行中,可以随时暂停当前 Fiber 的运行,并在稍后恢复。
  3. 独立栈:每个 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 国际」许可协议进行许可。

转载请注明原处

posted @   Carver-大脸猫  阅读(203)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu