关于 php8.1 fiber 特性使用体验 (与预期有一定落差)不知道大家怎么看

首先 关于类型相关,枚举相关,我觉得改进很好,很好,很好。不过 fiber 试了一下,算是比较迷了。
不知道是我使用的方式不对,还是理解不到位。
体验如下
1 sleep 会阻塞,这并不是一个直接可以将一个程序里面的逻辑并行执行的的特性;
2 fiber 的出现也无法让我在 cli 中撰写多消费者。或者并行执行多个子逻辑;
如果这个是为了和一些异步i/o库进行改造使用。感觉近期内很难直接投入使用,对 php-fpm 也作用不大。如果把 fiber 当成语法糖倒是也能稍微用一下(yield我就当成语法糖用了,封装了一个读取csv的包。)
ReadAsArr
因为我了解像 node 这种,如果使用你要使用他的异步 i/o 特性,需要使用核心提供的方法。php 也提供了一些异步 i/o 的函数,比如 stream,curl。
node 是回调。没记错的话,php 大多需要手动触发。
react 之前试着放到 laravel 运行。 体验不是很好。如果这个特性是对 react / amphp ,帮助比较大的话,其实对我(起码对我这种 php-fpm + command cli) 来说基本上用处比较小。
目前我是各种关于 cli 代替 php-fpm。看法一般般吧。稍微觉得好点的也就 swoole(但是我并没有用)。react/amphp 等用起来,reload呀,多核 cpu 之类的。
其实能并行执行逻辑对我很重要,但是这个特性并没有实现。囧。
不知道大家怎么看

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

    $value = Fiber::suspend('fiber');
    echo "Value used to resume fiber: ", $value, "\n";

    echo "end".PHP_EOL;
});

$value = $fiber->start();

echo "Value from fiber suspending: ", $value, "\n";

$fiber->resume('test');
echo 1;
biubiubiu
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 21

阻塞,这是最核心的问题,fiber并不会解决阻塞的问题,阻塞模型和非阻塞模型是系统底层的内容,这也是fiber特性争议最大的点,因为不解决php大量的阻塞函数fiber协程实际上意义并不大。

2年前 评论
AB 2年前
滚球兽进化 (楼主) 2年前
Kristiano (作者) 2年前

给它点时间。

2年前 评论
滚球兽进化 (楼主) 2年前

只是类似协程 Context 管理的一种实现, 实现协作多任务,允许 PHP 函数在不污染调用栈的情况下被中断,暂停,恢复,并支持现有接口的透明非阻塞 I/O 实现.

2年前 评论

不懂这玩意,,,不过你是不是想要一个类似 JS 中的 promise 这种异步,,,我也想要

2年前 评论
滚球兽进化 (楼主) 2年前
滚球兽进化 (楼主) 2年前
游离不2

落差不落差的倒无所谓,只要不跟 swoole 冲突就行 :yum:

2年前 评论

标准库没有一套完整的非阻塞函数库,也没有多线程支持。用rust吧,体验很好

2年前 评论
myhui0926 2年前

fiber 只是最基本的,后续看社区的支持程度吧。不要往 amphp 他们那些异步回调方向走。希望朝 Golang\swoole 用的协程方向走。 不过 swoole 抽离出了一个 swow 好像也准备提交了。

2年前 评论

有JS 中的 promise 就好了,其他的开发者自己会搞定的,现在尴尬的是连这个也没有,导致一直丢失市场份额,而swoole之类的产品学习成本太高,有这时间去学习swoole,golang都已经上手了

2年前 评论
yzbfeng 2年前
李铭昕

落差不落差到无所谓,只要不要影响我用 Swoole/Swow 就行了

2年前 评论

这就是韩天峰对 fiber 进 PHP 8.1 投反对票的原因,它既没有解决关键问题,也没有提供能兼容之前系统的编程方案,只是帮像 amphp 这样的另类框架打了个辅助,他认为这个扩展应该进 PECL 而非成为 PHP 的核心组件。

1年前 评论
elphen (作者) 1年前
滚球兽进化 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!