别再混淆 PHP8.1 中纤程 Fibers 和协程 Coroutines 了 一文搞懂它们的区别

news/2025/9/24 8:22:08/文章来源:https://www.cnblogs.com/catchadmin/p/19108502

别再混淆 PHP8.1 中纤程 Fibers 和协程 Coroutines 了 一文搞懂它们的区别

PHP 从早期那个只能写动态网页的简单脚本语言,发展到现在已经走了很远。PHP 8.1 的发布带来了一个特别令人兴奋的新功能:纤程(Fibers)—— 这个强大的特性为语言引入了结构化并发。

但有个问题:很多开发者还是会把协程纤程(Fibers)搞混,经常把它们当成一回事。虽然确实有相似的地方,但这两个概念有重要的区别。在设计异步或并发 PHP 应用时,搞清楚这些区别很重要。

让我们来详细分析一下。

原文链接-别再混淆 PHP8.1 中纤程 Fibers 和协程 Coroutines 了 一文搞懂它们的区别

什么是协程?

协程是一个通用的编程概念。你可以把它想象成一个特殊的函数,能够在某些地方暂停,然后稍后从暂停的地方继续执行。

在 PHP 中,协程通常通过生成器(yield)来实现。例如:

<?phpfunction coroutineExample() {echo "Start\n";yield;echo "Resume\n";
}$coroutine = coroutineExample();
$coroutine->current();  // Start
$coroutine->next();     // Resume

这里,yield 允许函数暂停,将控制权返回给调用者,稍后再恢复。

这让协程在异步 I/O、数据管道和惰性求值方面特别有用。像 ReactPHP 和 Amp 这样的库底层就大量使用协程。

流程图:

┌─────────────┐
│ 开始函数     │
└──────┬──────┘│▼yield (暂停)│▼恢复执行│▼函数结束

什么是纤程 Fibers?

Fibers 是 PHP 8.1 中引入的一个更新、更底层的概念。它们是轻量级的执行上下文,可以手动控制暂停和恢复。

与协程不同,Fibers 不依赖 yield`。它们使用 Fiber API 来显式挂起:

<?php$fiber = new Fiber(function (): void {echo "Start\n";Fiber::suspend("Paused");echo "Resume\n";
});
$value = $fiber->start();  // Start
echo $value . "\n";        // Paused
$fiber->resume();          // Resume

纤程让你对执行流程有完全的控制权。它们让你能写出看起来像同步但实际是异步的代码,而且不会被生成器的各种限制绊住。

流程图:

┌─────────────┐
│ 纤程开始     │
└──────┬──────┘│▼挂起 (手动)│▼恢复 (手动)│▼再次挂起 (可选)│▼纤程完成

协程 vs Fibers:关键区别

方面 协程 Fibers
概念来源 高级语言特性 底层基础组件
实现方式 yield Fiber 类
使用场景 异步 I/O、管道、迭代 事件循环、异步框架
控制权 调用者通过生成器 API 控制 Fibers 完全控制执行上下文
恢复能力 只能在 yield 处暂停 可以在函数的任意点挂起
限制 不能返回到任意点 更灵活和强大

简而言之:

  • 协程(生成器)为你提供迭代和类异步模式的便捷语法。
  • Fibers提供了在 PHP 中构建强大异步运行时的基础组件。

为什么这对 PHP 开发者很重要?

Fibers出现之前,PHP 没有一种干净利落的方式来处理异步工作流,只能用那些看起来很丑的回调链或者各种生成器的奇技淫巧。

有了Fibers,像 Amp v3, ReactPHP, webman(2.0 版本支持 Fibers 驱动了) 这样的库现在能让异步代码看起来像同步代码一样:

<?phpfunction fetchData(): string {// 假装这是异步 I/OFiber::suspend("Waiting for response...");return "Data received!";
}$fiber = new Fiber(fn() => fetchData());
echo $fiber->start(); // Waiting for response...
echo $fiber->resume(); // Data received!

这使得 PHP 在并发服务器、实时应用和高性能 API 方面成为更强的竞争者。

总结

协程和 Fibers 是相关的,但不是同一个东西:

  • 协程(通过生成器)是暂停和恢复函数的模式。
  • Fibers是实现结构化并发和现代异步运行时的底层基础组件。

把协程想象成菜谱,Fibers 想象成食材。有了 Fibers 这个食材,你可以做出协程这道菜——但反过来就不行了。

如果你现在在用异步 PHP,搞清楚这些区别能帮你为项目选对工具和框架。

👉 你怎么看——Fibers 会把 PHP 带入异步编程的新时代,还是协程依然会是大多数开发者的首选?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP Request Blocker的下载与使用 - 实践

HTTP Request Blocker的下载与使用 - 实践2025-09-24 08:17 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bloc…

学做网站赚钱方法wordpress 运行天数 小工具

考研计算机网课辅导哪个好&#xff1f;面对市面上如此之多的考研辅导&#xff0c;怎么选择成了很多学员的难题。现在的在线教育水平很高了&#xff0c;特别是在考研辅导上&#xff0c;学习自由&#xff0c;配套服务全面。找培训还是要看老师&#xff0c;比较牛叉的注会老师如张…

织梦网站模板视频教程宠物 wordpress

文章目录 写在前面Tag题目1方法一&#xff1a;动态规划方法二&#xff1a;空间优化 题目2方法一&#xff1a;动态规划空间优化 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主…

杭州九鸿科技网站开发威海建设集团网站首页

有如下的实体对象 public class BookEntity {private String desc; }查询操作的时候会报错SQL错误 解决方法 在字段属性上加注解&#xff0c;用反引号包裹属性值 public class BookEntity {TableField("desc")private String desc; }参考 解决MySQL 中使用index…

多人视频网站开发公司厦门建设局

本文简要介绍我们刚刚被WSDM2021会议录用并即将发表的论文"Time-Series Event Prediction with Evolutionary State Graph"(论文地址)&#xff0c;在文中我们提出了一种将时序转化为图进行表示建模的方法。同时我们把所实现的方法落地为阿里云SLS的智能巡检服务&…

科技公司网站模板官网wordpress用户注册设置

目录 三、存储虚拟化&#xff08;一&#xff09;存储虚拟化的一般模型&#xff08;二&#xff09;存储虚拟化的实现方式&#xff08;三&#xff09;案例分析 四、网络虚拟化&#xff08;一&#xff09;核心层网络虚拟化&#xff08;二&#xff09;接入层网络虚拟化&#xff08;…

h5平台网站开发百度网址大全简单版

java springmvc 注册中央调度器代码解析发布时间&#xff1a;2020-08-22 20:58:23来源&#xff1a;脚本之家阅读&#xff1a;107作者&#xff1a;荆棘人这篇文章主要介绍了java springmvc 注册中央调度器代码解析,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工…

校园网网站的安全建设方案上海网站开发与

一、实验拓扑 二、实验目的 PVLAN可以通过主VLAN和辅助VLAN的概念&#xff0c;部署隔离技术&#xff0c;实现用户间的互访控制。 三、实验配置 SW2 Ruijie >enable Ruijie #configure terminal Ruijie (config)#vlan 20 Ruijie (config-vlan)#private-vlan community …

南宁网站设计平台网站权限怎么设置

5月已经过去&#xff0c;同时也标志着今年上半年手机的发布已经告一段落。那么在这段时间里&#xff0c;智能手机的性价比如何呢&#xff1f;考虑到现在已经开始步入5G时代&#xff0c;所以智能手机的价格也是普遍上涨&#xff0c;想要找到一款性价比不错的手机似乎有些难度。现…

资阳网站优化网站的维护和建设

文章目录 Intro解决流程总结前置信息了解npm 镜像源三个要用到的npm命令 官方源确认查看当前镜像源的详情解决&#xff1a; 切换镜像源后重试重新操作 事后感受 Intro 事由是今天我在用 create-react-app 新建一个用于测试的前端项目。 然后就出现以下报错&#xff1a; wuyuj…

NeurIPS 2025 spotlight |FSDrive 自动驾驶最新VLA+世界模型 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站制作中山一个网站上面有名优

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼6楼兄弟谢了哈。可以啦!!!!哈哈&#xff0c;开心啊、//1900年1月1日是星期一//所以从1900年1月1日算起#include int fun(int year);int main(){int year,month,day;int i;int ts1[]{31,28,31,30,31,30,31,31,30,31,30,31}; //非…

宁波网站推广规划深圳宝安做网站

MSWORLD 题目大意&#xff1a; 在一个图上有n个点&#xff0c;现在问你最远的两个点的直线距离的平方是多少 输入样例 4 0 0 0 1 1 1 1 0输出样例 2样例解释&#xff1a; 农场1&#xff08;0,0&#xff09;和农场3&#xff08;1,1&#xff09;的距离为 2的开方。 数据范…

菏泽市建设职工培训中心网站crm客户管理系统官网

前言 默认情况下&#xff0c;我们在PHP里使用echo等函数输出的内容&#xff0c;是不会马上发送给前端的&#xff0c;原因是有 buffer 的存在&#xff0c;buffer又分两处&#xff0c;一处是PHP本身的buffer&#xff0c;另一处是Nginx的buffer。只有当buffer满了之后&#xff0c…

婚纱照网站制作租赁合同模板

交换机&#xff1a; 分类&#xff1a; 根据交换方式划分&#xff1a; 1.存储转发交换&#xff1a;交换机对输入的数据包先进行缓存、验证、碎片过滤&#xff0c;然后进行转发。 时延大&#xff0c;但是可以提供差错校验&#xff0c;并支持不同速度的输入、输出端口间的交换…

昆明门户网站宿州市做网站建设的公司

Docker 入门使用说明 Docker 安装 Docker 官网&#xff1a;Docker Docker 安装说明&#xff1a;Docker 安装说明 这里由于 Docker 在实时更新&#xff0c;所以每次安装 Docker 用来导入 key 的链接可能会有变化&#xff0c;这里就参考官方的安装方法即可 Docker 常用命令说…

最新获取网站访客qq接口建设企业银行app官方下载

回滚整个事务要怎么清除 binlog 日志&#xff0c;InnoDB 又会进行哪些操作&#xff1f; 作者&#xff1a;操盛春&#xff0c;爱可生技术专家&#xff0c;公众号『一树一溪』作者&#xff0c;专注于研究 MySQL 和 OceanBase 源码。 爱可生开源社区出品&#xff0c;原创内容未经授…

网站设计的灵感来源网站建设需要些什么

随着数字化时代的不断深入&#xff0c;数据隐私保护已经成为了人们越来越关注的焦点之一。而在这个数字化时代的新篇章中&#xff0c;Web3技术作为下一代互联网的代表&#xff0c;正在为数据隐私保护带来全新的创新和可能性。本文将深入探讨数据隐私的重要性&#xff0c;Web3时…

网站建设 核算外贸公司推广

本文主要从 单特征分析&#xff0c;多特征筛选&#xff0c;特征监控&#xff0c;外部特征评估的几个方面对特征数据进行阐述。 来源 &#xff1a; 特征筛选_特征覆盖度怎么算_adamyoungjack的博客-CSDN博客 1. 单特征分析 1.1 简介 好特征可以从几个角度衡量&#xff1a;覆…