位置: 编程技术 - 正文

关于PHP中协程和阻塞的一些理解与思考(php通信协议)

编辑:rootadmin

推荐整理分享关于PHP中协程和阻塞的一些理解与思考(php通信协议),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php协程提案,php 协程,php协程异步请求,php8协程,php 进程 线程 协程,php 协程,php8协程,php8协程,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

本文主要给大家介绍了关于PHP中协程和阻塞的理解与思考,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

进程、线程、协程

关于进程、线程、协程,有非常详细和丰富的博客或者学习资源,我不在此做赘述,我大致在此介绍一下这几个东西。

进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。 协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。

PHP中的协程实现基础 yield

yield的根本实现是生成器类,而迭代器类是迭代器接口的实现:

以上解析可以参考PHP官方文档。

关于PHP中协程和阻塞的一些理解与思考(php通信协议)

产生两个任务,并行执行,并且给每个任务在执行的时候模拟几秒钟的阻塞; 让协程切换的时候能顺利切换,其中的任务阻塞不相互影响;

思考:

我为什么要做以上这件事情呢?因为我发现协程实现虽然很强大也很有意思,能让多任务并行,但是我在其中一个任务里调用系统函数 sleep() 的时候,阻塞任务会阻止协程切换,其实从协程的实现原理上来书也是这么回事。

那么,我也就想模拟协程阻塞,但是不产生阻塞看是否可行。PHP本身只提供了生成器为协程调用提供了支撑,如果不依赖扩展,没有提供多线程的程序实现方式,没有java那么强大,可以开子线程进行实现。

我印象中java的子线程是独立执行且不会相互阻塞的,所以我在想,PHP既然可以实现类似于多线程这样的机制,那么能不能实现调用过程中非阻塞呢?

经过这样一个实现和思考,一开始是陷入了一个误区的,是由于PHP原生函数 sleep() 阻塞造成的思维误区,那就是认为要想真正实现非阻塞或者说实现异步的话,是必须依赖于语言底层的。

后来,我想明白了一个道理,既然某个方法或者函数在执行过程中,会产生阻塞,那么把当前这个方法换成自定义的,做成非阻塞(相对于整个协程调度来说)不就行了吗?比如上面的定时执行我自己实现了一个。

而另一方面,协程调度本身的目的也是为了把任务执行过程切成尽量小片,从而快速切换执行,达到并行的目的。从这方面来看,协程应该也算是一种程序设计思想。

以下是一个程序切成尽量小片执行的例子:

这个例子是把原本用 range 生成一个很大的整型数组的方式切换为分片执行,也就是说在遍历的时候再去取到指定的值,从代码上来看,内存消耗相对于之前来说就非常小了。

总结

标签: php通信协议

本文链接地址:https://www.jiuchutong.com/biancheng/287494.html 转载请保留说明!

上一篇:PHP实现的自定义图像居中裁剪函数示例【测试可用】(php自定义函数的语法格式)

下一篇:PHP递归实现文件夹的复制、删除、查看大小操作示例(php递归遍历文件夹)

  • 社保所属期和缴费期相差一个月吗
  • 对公账户转个人账户
  • 高铁费可抵扣适用税吗
  • 农行公户怎么给公户转账
  • 佣金可以入账吗
  • 申报入库税款怎么分税种发给税管员
  • 新会计准则施行
  • 投资盈利后可以买股票吗
  • 盘盈的存货一般作为什么处理
  • 贸易类公司做产品代理账务如何处理
  • 已入账未抵扣退回发票
  • 异地施工增值税发票如何开具
  • 股东出资不做股本做借款该怎么写分录?
  • 给客户办理分期
  • 对公账户打钱给私人账户,谁交税呢
  • 简易计征的税率
  • 境外单位向境内单位提供咨询
  • 集体土地上的不动产能符合异议28条规定吗
  • 增值税农产品扣除率
  • 商业保险和交强险区别
  • 增值说税率怎么计算
  • 支票大写金额书写转换
  • 租金税率9%和5
  • 代扣代缴增值税可以抵扣进项税?
  • 小区保安有收物业费的权利和义务吗?
  • 在window中
  • 固定资产转在建工程提折旧吗
  • mac怎么彻底删除一个软件
  • 在途物资属于什么科目借贷方向
  • php操作json
  • 发票管理的基础环节
  • 热带雨林瀑布群雪野
  • 日本长野县在哪
  • 结转去年成本
  • php sid
  • yii2超好用的日期组件和时间组件
  • 网上打印企业征信流程
  • 基于Selenium的自动化测试平台设计与实现
  • php常用方法
  • 强化学习之stable_baseline3详细说明和各项功能的使用
  • 这年头不好混图片
  • 用友软件年度结转操作步骤
  • 软件开发企业如何核算成本
  • 已开发票作废和空白发票作废有什么不一样?
  • 查验发票显示红冲是什么意思
  • 事业单位相关规定有哪些
  • 转租行为的税务处理方法
  • 未分配利润是否可以全部分红
  • 进项有效期
  • 汽车买卖中介
  • 另一种收到企业信息英文
  • 事业单位的结余与企业的利润相比
  • 招待费具体范围包括哪些
  • 企业收到返利怎么做账
  • 领备用金时会计怎么做分录
  • 单身租房子
  • 未完工工程如何验收
  • 捐赠支出算费用吗
  • 一般纳税人购买固定资产进项税可以抵扣吗
  • linux如何修改gid
  • linux的收获
  • 怎么安装u盘里的文件
  • init systemd
  • window8输入法怎么设置
  • opengl英文
  • Append、Debug、Diskcomp命令的使用说明
  • Android - Designtime Layout Attributes & Tools Attributes
  • Android 水平居中
  • 数据库并发操作主要解决哪三个问题,基本方法是什么
  • unity视频播放
  • 初步认识的思维导图
  • 原生js实现promise.all
  • javascript面向对象编程指南
  • 云南增值税普通发票怎么开
  • 专用发票如何导出
  • 低保大数据核查哪些数据
  • 税控盘反写后才能开票吗
  • 广西空置房物业费减免政策吗
  • 主管税务机关指的是
  • 河北省税金费率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设