位置: 编程技术 - 正文

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

  • 6.72的税率是怎么算的
  • 小微企业印花税怎么算
  • 稳岗返还资金最新账务处理
  • 外管证是在当地办理还是在外地办理
  • 本期实际抵减税额合计0.00不等于
  • 广告行业的税负率
  • 企业所得税纳税义务人
  • 土地增值税暂行条例实施细则 税屋
  • 绿化养护合同免费
  • 小规模纳税人外账处理
  • 金蝶软件数量金额式怎样输入数据
  • 财务报表中的负债是什么意思
  • 怎么根据进销存做账
  • 无票销售纳税后怎么处理
  • 向一般纳税人销售劳保专用物品
  • 调增应纳税所得额
  • 设备安装增值税适用税率
  • 农产品所得税扣除比例
  • 民办非企业单位是私立还是公立
  • 软件服务类企业
  • 因为买房子
  • 个人借支备用金限额
  • 企业的其他业务收入主要核算
  • 销项负数发票会计分录怎么写
  • 活动策划费开票在哪个项目下面
  • 房地产企业资金监管账户
  • win10应用商店没有软件库
  • win10预览版是什么意思
  • 小规模纳税人多久缴纳一次增值税
  • url传变量
  • 融资租赁综合利息计算
  • 酒店会计科目及账务处理视频
  • 分支机构分摊税款的计算
  • 吃辣第二天长痘痘
  • 庞塞 德莱昂
  • thinkphp import
  • 机器学习:基于逻辑回归对优惠券使用情况预测分析
  • 财政贴息会计处理怎么理解
  • 企业所得税退税申请理由怎么写
  • 小企业会计准则和一般企业会计准则的区别
  • 房企预缴增值税
  • 收到现金投资计入什么科目
  • 房产税如何申请减免
  • 赔偿损失费用发票怎么开
  • 化验委托书
  • 私人出租房子发圈文案
  • 产权转移数据印花税子目
  • 增值税代扣代缴范围
  • 高速公路车辆通行卡没还怎么办
  • 公司挂靠有资质的企业公司会计处理?
  • 建筑劳务公司的账务处理流程
  • 逾期纳税申报会被罚款吗
  • 成本收入率和收入成本率的区别
  • 税控盘开发票怎么测试打印机?
  • 固定资产清理后怎么做账
  • linux rpm文件怎么安装
  • mysql 5.6.23 winx64.zip安装详细教程
  • win10系统的邮件和日历跟outlook一样嘛
  • 双系统重装win11
  • linux限速
  • mac如何搜索应用
  • Win10 Mobile Build 10586.xx将持续更新 WP8.1用户可直升最新版
  • win7开机无法连接所有网络驱动器
  • windows 10预览版
  • 360安全卫士检测出来高危漏洞需要修复吗
  • cocos2dx schedule
  • jQuery Validation Engine验证控件调用外部函数验证的方法
  • 微软早在1985年便首次使用了安卓上饱受争议的汉堡按钮
  • opencv for linux
  • diy相册设计
  • 基于android的简单程序
  • shell脚本传参数给命令
  • 浅谈JavaScript事件的属性列表
  • android中的几种动画
  • 江苏省无犯罪证明
  • 公职律师
  • 干部试用期满转正考察谈话提纲
  • 技术咨询服务费税率
  • 杨静儿多少岁
  • 广西小学成绩查询入口官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设