介绍

总所周知,PHP8.1 新上线了 Fiber 功能,本人最近因为考试复习有点倦了所以偷偷的尝试玩了一下这个 Fiber,写了一个多线程的操作类并且进行了一些测试,下面会给出一些数据以及做出一些结论。需要注意的是这只是一个伪多线程,不是真正的多线程。

测试的Function

在单线程测试中如下:

$time = microtime(true);
while(microtime(true) <= $time + 1) {
    continue;
}

在多线程测试中如下:

$time = microtime(true);
while(microtime(true) <= $time + 1) {
    Fiber::suspend();
    continue;
}

FUNCTION 理论耗时:1秒

FUNCTION 操作理论:通过获取当前的时间戳且记录,通过while功能进行时间比较,理论while功能将会持续 1 秒,此功能计时精准到毫秒

结果数据

总耗时:程序执行所耗费的时间(使用PHP计算)

系统耗时:总耗时 - (1 * FUNCTION 执行次数)

FUNCTION执行次数单线程(总耗时/秒)多线程(总耗时/秒)单线程(系统耗时/秒)多线程(系统耗时/秒)
1010.0023191.0006070.0023190.000607
2525.0035681.0012880.0035680.001288
5050.0104681.0035830.0104680.003583
7575.0110911.0053360.0110910.005336
100100.0197731.0062410.0197730.006241

结论

通过这次的测试,我们可以看到 Fiber 的确为 PHP 的多线程做出了杰出的贡献,无论是在总耗时还是系统耗时,都比平常单线程的执行要好很多。或许已经有一些外部的扩展可以做到这一点了,但是这次 PHP 更新了 Fiber 无疑还是一次很好的尝试,有助于更多人选择 PHP 进行编程。