位置: 编程技术 - 正文

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

  • 增值税附加税减免
  • 企业增资后需要交什么税
  • 不动产租赁可以加计扣除吗
  • 存出资本保证金是金融资产吗
  • 行政事业单位国有资产处置管理办法
  • 预算外资金收入政府会计
  • 异地预缴增值税后本地怎么申报
  • 已认证未入账的分录
  • 在建工程转固定资产后如何计提折旧
  • 绿植租赁公司都适合什么名字
  • 固定资产报废怎么开票
  • 主营业务成本怎么算出来的
  • 无形资产管理费用不计入
  • 哪些行业需要缴纳水利建设基金
  • 单位购进员工餐食材怎做账务处理?
  • 1697510605
  • 机动车销售统一专票税率
  • mac的分辨率怎么调
  • 发生以前年度损益调整
  • bios怎么更改硬盘
  • 然后重装系统win7
  • 苹果电脑付款方式设置
  • linux tr
  • linux解压安装
  • antd upload组件
  • php公众号推送完整示例
  • 蓝山公馆的房子怎么样
  • 印花税减半征收优惠政策2020
  • 买一赠一的会计处理与税务处理
  • vuejs性能
  • json字符串转json js
  • 股权转让实操
  • HTML与PyCharm
  • 开了专票就不能享受政策
  • 增值税专用发票和普通发票的区别
  • 什么时候需要结转损益
  • 软件开发企业如何计算利润
  • js逻辑表达式
  • 低值易耗品在年报上怎么看的
  • java数组合并变字符串
  • 物流公司驾驶员工资计算方式
  • 独资企业和公司区别
  • 餐饮个体户如何申请开票
  • 补提去年企业所得税会计分录
  • 在资产减值准备中符合条件可以转回的有
  • sql语句清空表中数据
  • 预收和预付科目一样吗
  • 可供出售金融资产公允价值变动
  • 失控发票补缴税款后又被稽查
  • 工程的挂靠取得收入怎么做账?
  • 公司老板个人卡收支公司业务属于什么行为
  • 高速过路费怎么补交
  • 营改增后众筹融资业务的会计处理分析?
  • 员工给兄弟公司的感谢信
  • 收到支付宝认证怎么做账
  • 可供出售金融资产属于什么科目
  • 银行存款利息计算器在线计算器
  • 按预测范围不同划分为以下几类
  • 年底奖金怎么入账
  • 开具销项负数发票会计分录
  • UNIX系统中文件的索引表结构
  • win7 word
  • win10系统打开ie浏览器变百度怎么改回ie浏览器了
  • synergy linux
  • win7怎么查看电脑主板型号
  • ghost32命令参数
  • js确认框s弹出框确定和取消
  • jquery 报表
  • Do All in Cmd Shell一切在命令行下完成第1/6页
  • unity游戏开发常用技术
  • shell脚本中执行命令语句
  • linux一些常用操作命令 (不定时更新)
  • shell脚本定时任务怎么写
  • 成都税务企业号公众号
  • 个体经营所得申报密码怎样设置
  • 陕西地税发票怎么重新打印
  • 上海社保转出后查不到记录
  • 云南省国家税务局电子税务局官网
  • 长春市税务局领导
  • 地税稽查局查账严重吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设