位置: 编程技术 - 正文

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

  • 个人所得税退付手续费是给企业还是会计
  • 如何开具免税发票
  • 应付职工薪酬和工资总额的区别
  • 即征即退进项税额为哪些
  • 如何查询对方是不是一般纳税人
  • 哪个税种不需要认定就能在电子税务局申报
  • 一般纳税人固定资产怎么入账
  • 供热企业不得抵扣的进项计算
  • 国有资产报废如何委托拍卖公司
  • 招待住宿费计入什么科目
  • 商场销售化妆品应当缴纳增值税和消费税对吗
  • 抵减以前年度多缴企业所得税分录
  • 当月增次月是什么意思
  • 公司开年会的费用怎么入账
  • 继承的房产出售要交20%是全额还是差额
  • 外购无形资产的成本包括进口关税吗
  • 给别人代付
  • 固定资产折旧转入什么科目
  • 买卖不破租赁什么情况必须搬走
  • 应收账款账龄分析简单例题
  • 员工饭卡充值是哪个部门做
  • 2019一般纳税人转小规模
  • 金融会计风险及防范措施研究目的和意义
  • 1697510490
  • 采购过程中产生的物流成本案例分析
  • 局域网解决方案
  • linux中使用less命令分屏查看
  • 为什么Windows 7搜不到网
  • 企业所得税费用扣除比例
  • phpcms手册
  • 在建工程如何转为成本费用
  • 发生额怎么算
  • 另一种答案
  • 自制生产设备领用原材料按照什么确认收入
  • 建造师与建筑师的区别详解
  • transformer中的参数
  • 旅客运输进项抵扣税率
  • 前端vue3
  • vue接入高德地图
  • 2022前端面试题及答案
  • 企业所得税资产总额平均值怎么算
  • 开发项目完工后多久开工
  • 公司购买一台电脑低于3000元怎么办
  • mysql中事务的作用
  • 织梦如何添加浮动广告
  • 印花税怎么交税率是多少
  • 什么是,利息
  • 给员工购买住房公积金是先办卡吗?
  • 一般纳税人混凝土税率
  • 有限合伙企业属于企业法人还是非法人企业
  • sqlserver聚集函数
  • 实物投资入股
  • 为什么运输合肥料检测核辐射人会拿一个玻璃棒
  • 预计负债的账务处理
  • 安全生产费用提取标准 最新
  • 百旺金赋税盘怎么清卡
  • 企业为员工代缴社保怎样在网上申报
  • 新建企业需要什么手续
  • 隔离模块与隔离模块如何连接?
  • mysql多表查询方式
  • xp启用telnet
  • 打开安全启动
  • linux系统怎么增大磁盘io
  • win8系统屏幕亮度调节
  • [图文教程]Win10家庭版怎么快速升级到win10专业版?
  • linux文件权限的设置与修改
  • 基于stm32的100个毕业设计
  • 前端html中怎么让文字左移
  • awk指令指定脚本程序
  • node.js底层原理
  • cmd命令基础
  • 批处理 输出换行
  • python开发软件教程
  • jquery简写符号
  • js 构建树
  • python simple
  • 简述python语言
  • 福建税务局网上办税
  • 建筑企业税务清算流程图
  • 如何连续打印单据
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设