您的位置:网站首页 > php源码 > 正文

关于PHP协程与阻塞的思考

类别:php源码 日期:2017-11-25 14:57:12 人气: 来源:

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

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

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

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

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

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

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

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

  从文件中可以看出,搭载OS X操作系统的MacBook以及搭载tvOS操作系统的Apple TV使用周...

  三星S9手机已经陆陆续续有了一些传闻,这款产品很可能在明年MWC展会期间发布,去年S8...

  据CNBC网站时间11月22日报道,惠普企业公司(HPE)公司首席执行官梅格·惠特曼(M...

  一名美国已责令进行一项新的审判,目的是判定三星应因其抄袭苹果公司iPhone外观设...

  大家知道,将蓝牙设备与Windows PC配对是一件很繁琐的事情,需要一个个步骤,还得用上...

  iPhone X 已经上市一段时间了,相信很多朋友都已经熟悉了苹果最新的旗舰产品。而对于...

  炉石传说继【冰封王座的骑士】新卡组后又推出【狗头人与地界】新卡包。此套卡组已......

  《绝地大逃杀》中的四排是需要有一些战术策略的,这样团队合作才能发挥出较好的效......

  推荐:

  

关键词:php代码生成器
0
0
0
0
0
0
0
0
下一篇:没有资料

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

CopyRight 2002-2012 技术支持 源码吧 FXT All Rights Reserved

赞助合作: