位置: 编程技术 - 正文

关于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递归遍历文件夹)

  • 先开票后收款违法吗
  • 收到退回的留抵退税怎么做账
  • 形式发票需要签字盖章吗
  • 调整多计提所得税的分录
  • 预缴土地增值税的会计处理
  • 暂估入库原材料成本结转后期发票到怎么处理
  • 特定资产收益权融资业务
  • 收据注明实际到账时间
  • 审计调整tb
  • 企业房产税如何申报缴纳
  • 出口用的增值税税率
  • 广告制作费有哪些项目
  • 出口退税收汇凭证号
  • 发票首次核定
  • 企业出售固定资产取得的净收益应列入的利润表项目是
  • 不申报税务登记被注销
  • 我的初级备考经历怎么写
  • 中标费用由哪方出
  • 购买东西押金不退要怎么处理
  • 免税的发票可以用来抵税吗
  • 收上级补助款专用如何做账?
  • 跨年度的房租发票怎么做账
  • win10系统还原会删除其他盘的文件吗
  • 电子发票上的电子税章如何才能自动生成
  • 资本公积如何计提
  • 收到财政厅的补助怎么办
  • 专票 普票
  • 研发阶段产品销售账务处理
  • 华为手机网络拒绝接入怎么解决
  • 纯净版xp系统打不开了
  • 水养绿萝怎么养护长得才茂盛
  • 怎么更改win7
  • PHP:proc_terminate()的用法_命令行函数
  • PHP:diskfreespace()的用法_Filesystem函数
  • 土地增值税的具体规定
  • 工地扬尘检测仪防尘缸怎么安装
  • 哪些费用报销可以不用发票
  • 计算机视觉算法
  • php判断手机浏览记录数据
  • 政府补助收入是免税收入还是不征税收入
  • 补收入账是什么意思
  • 营业外收支核算的内容有哪些?
  • 增值税申报表33栏显示有欠缴税额
  • 家具采购单
  • sql server打开方式
  • 织梦cms怎么样
  • 长期股权投资收益要交企业所得税吗
  • sqlserver2005数据库导出数据成.sql
  • 税控服务费属于增值税减免费?
  • 什么叫境外地区
  • 水电费发票没有可以用其他发票抵吗
  • 应交税费科目的核算内容
  • 小规模购进商品怎么做账
  • 单位内部食堂怎么收费
  • 员工缴纳工伤保险怎么赔偿
  • 对外服务应收取的款项
  • 年末转出未交增值税借方余额怎么处理
  • 已认证发票退回说明模板
  • 退资本金现金流量表走哪一项
  • 企业接受捐赠的固定资产,应增加营业外收入
  • 什么是生产成本,有哪些组成内容
  • 简单介绍清明上河图
  • rhel安装mysql
  • MySQL使用select语句查询指定表中指定列(字段)的数据
  • linux 主力机
  • 注册表c盘桌面路径改为d盘
  • linux如何拨号
  • OS X Yosemite系统怎么样 OS X Yosemite功能介绍
  • win7通知区域图标无法设置
  • cocos2dx scrollview
  • call to OpenGL ES API with no current context (logged once per thread)
  • node.js入门
  • shell脚本实现自动部署
  • shell脚本指南
  • math在java
  • jquery属性选择器,选取所有带href
  • js遍历foreach
  • 公司买水果怎么开票
  • 深圳城管局 局长
  • 二手车中介公司怎么做账报税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设