关于 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;
推荐文章: