Rumah > Artikel > pembangunan bahagian belakang > 了解PHP yield的高级用法
刚开始接触PHP
的 yield
的时候,感觉,yield
是什么黑科技,百度一下:yield
——协程,生成器。很多文章都在讲 Iterator
,Generater
, 蛤~,这东西是 PHP 迭代器的一个补充。再翻几页,就是Go 协程
。我出于好奇点开看了下Go 协程
, 里面都是 并发
,线程
,管道通讯
这类字眼,wc,nb, 这tm才是黑科技啊,再回来看PHP
,分分钟想转 Go
。
相关学习推荐:PHP编程从入门到精通
yield
语法是在版本5.5加入PHP
的,配合迭代器使用,功能上就是 流程控制
代码,和goto
,return
类似。
以下就是官方提供的 yield 小例子,通过执行结果,我们可分析当代码执行到 yield $i
时,他会进行 return $i
, 待 echo "$value\n"
后, goto
for ($i = 1; $i 1665c0965938da04696e3c4e4fd8bf61loop()
),也就是多路监听:请求端口,第三方客户端请求响应端口。这个时候如果:
worker
竞争新的请求,如果竞争到了,则该worker内又产生一个新的 生成器。从1中,我们可假设,如果就一个 Worker
,那么该 Worker
可以在上一个请求未完成情况下,继续接受处理下一个请求。也就是 CoWorkerman
可以在单 Worker
下运行,并发处理多个请求。
当然,这里也有个前提,单
Worker
模式内不能运行阻塞函数,一旦阻塞,后续请求就会堵在网卡。所以,除非对自己的代码非常了解,如果用到第三方库,那么我还是建议你在多Worker
模式下运行CoWorkerman
,阻塞时,还有其他Worker
兜住新请求。
适合处理纯Socket
请求的应用,如Workerman Gateway
,或者是 大前端
整合多个服务RPC
结果, 综合后返给前三页
这样的场景.
日志记录是每个程序最基本需求,由于写文件函数是阻塞的,建议用消息队列,或者redis队列,更或者跳过
Logstash
直接丢Elasticsearch
.
CoWorkerman有他的局限性,也有他自己位置。
好~PHP 协程编码到 网络异步编码就到此结束了,如果看到本文章有很多疑惑,欢迎留言提问,如果是 yield
语法不太记得,可以先读一读这个系列前几篇文章复习一下。
如果行,请三连。CoWorkerman
谢谢!
Atas ialah kandungan terperinci 了解PHP yield的高级用法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!