PHP: 纤程

PHP: 纤程

纤程概述

(PHP 8 >= 8.1.0)

纤程(Fiber)表示一组有完整栈、可中断的功能。

纤程可以在调用堆栈中的任何位置被挂起,在纤程内暂停执行,直到稍后恢复。

纤程可以暂停整个执行堆栈,所以该函数的直接调用者不需要改变调用这个函数的方式。

你可以在调用堆栈的任意地方使用 Fiber::suspend()

中断执行(也就是说,Fiber::suspend()

的调用位置可以在一个深度嵌套的函数中,甚至可以不存在)。

与无栈的 Generator 不同, 每一个

Fiber 拥有自己的调用栈,并允许在一个深度前度的函数调用中将它们暂停。

声明了中断(interruption)点的函数(即调用 Fiber::suspend())

不需要改变自己的返回类型,不像使用 yield 一样需要返回一个

Generator 实例。

纤程可以在任意函数调用中被暂停,包括那些在 PHP VM 中被调用的函数。

例如被用于 array_map() 的函数或者提供

Iterator 对象以被 foreach 调用的方法。

纤程一旦被暂停,可以使用 Fiber::resume()

传递任意值、或者使用 Fiber::throw()

向纤程抛出一个异常以恢复运行。这个值或者异常将会在

Fiber::suspend() 中被返回(抛出)。

注意:

在 PHP 8.4.0 之前,不允许在对象析构方法执行期间切换纤程。

示例 #1 基础用法

$fiber = new Fiber(function (): void {

$value = Fiber::suspend('fiber');

echo "Value used to resume fiber: ", $value, PHP_EOL;

});

$value = $fiber->start();

echo "Value from fiber suspending: ", $value, PHP_EOL;

$fiber->resume('test');

?>

以上示例会输出:

Value from fiber suspending: fiber

Value used to resume fiber: test

相关推荐

网站制作软件哪个好 十款常用网站制作软件排行
AR/VR 中的光子:变革沉浸式技术
365平台怎么注册

AR/VR 中的光子:变革沉浸式技术

📅 10-14 👁️ 2691
京剧《刘兰芝》 天津青年京剧团
365beat中文版

京剧《刘兰芝》 天津青年京剧团

📅 07-30 👁️ 1594
KPL赛场上的利刃出鞘——宫本武藏深度攻略
office365无法登录账号

KPL赛场上的利刃出鞘——宫本武藏深度攻略

📅 06-17 👁️ 8351
发现泰国的最佳季节:什么时候去玩! » Agoda: See The World For Less
成都国色天乡摩天轮游玩攻略简介,成都国色天乡摩天轮门票/地址/图片/开放时间/照片/门票价格【携程攻略】
手机到底多久关机一次最合适?每天都关机真的有必要吗?
office365无法登录账号

手机到底多久关机一次最合适?每天都关机真的有必要吗?

📅 12-30 👁️ 8609
螭虎和螭龙的区别
365平台怎么注册

螭虎和螭龙的区别

📅 02-17 👁️ 3693
中国犬种大全及名称(探索中国本土犬种大全及名称)
365平台怎么注册

中国犬种大全及名称(探索中国本土犬种大全及名称)

📅 01-13 👁️ 1782