搜索
首页后端开发php教程了解PHP yield的高级用法

了解PHP yield的高级用法

Jun 30, 2020 pm 05:37 PM
phpyield

了解PHP yield的高级用法

开篇

刚开始接触PHPyield 的时候,感觉,yield 是什么黑科技,百度一下:yield——协程,生成器。很多文章都在讲 IteratorGenerater, 蛤~,这东西是 PHP 迭代器的一个补充。再翻几页,就是Go 协程。我出于好奇点开看了下Go 协程, 里面都是 并发线程管道通讯这类字眼,wc,nb, 这tm才是黑科技啊,再回来看PHP,分分钟想转 Go

相关学习推荐:PHP编程从入门到精通

yield 语法加入 PHP

yield语法是在版本5.5加入PHP的,配合迭代器使用,功能上就是 流程控制 代码,和gotoreturn 类似。

以下就是官方提供的 yield 小例子,通过执行结果,我们可分析当代码执行到 yield $i 时,他会进行 return $i, 待 echo "$value\n" 后, goto  for ($i = 1; $i c605c547e74fe941316b92654c03c006loop()),也就是多路监听:请求端口,第三方客户端请求响应端口。这个时候如果:

  1. 有新的请求来,他和其他 worker 竞争新的请求,如果竞争到了,则该worker内又产生一个新的 生成器。
  2. 客户端有响应,则调用回调函数
  3. 客户端都响应了,继续运行 生成器程序。

从1中,我们可假设,如果就一个 Worker,那么该 Worker 可以在上一个请求未完成情况下,继续接受处理下一个请求。也就是 CoWorkerman 可以在单 Worker 下运行,并发处理多个请求。

当然,这里也有个前提,单 Worker 模式内不能运行阻塞函数,一旦阻塞,后续请求就会堵在网卡。所以,除非对自己的代码非常了解,如果用到第三方库,那么我还是建议你在多 Worker 模式下运行 CoWorkerman,阻塞时,还有其他Worker兜住新请求。

CoWorkerman 的意义

  1. 用同步的代码,发起异步请求,多个请求可并发,从IO串行等待,改为并行等待,减少无畏的等待时间。提高业务程序的效率同时,不降低代码可读性。
  2. 在一个线程内通过事件循环,尽可能处理多个请求,缓解了一个请求一个线程带来的频繁线程切换,从核心上提高运行效率。

CoWorkerman 生态位

适合处理纯Socket请求的应用,如Workerman Gateway,或者是 大前端 整合多个服务RPC结果, 综合后返给前三页这样的场景.

日志记录是每个程序最基本需求,由于写文件函数是阻塞的,建议用消息队列,或者redis队列,更或者跳过Logstash直接丢Elasticsearch.

CoWorkerman有他的局限性,也有他自己位置。

总结

好~PHP 协程编码到 网络异步编码就到此结束了,如果看到本文章有很多疑惑,欢迎留言提问,如果是 yield 语法不太记得,可以先读一读这个系列前几篇文章复习一下。

如果行,请三连。CoWorkerman 谢谢!

懂王

以上是了解PHP yield的高级用法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:learnku。如有侵权,请联系admin@php.cn删除
哪些常见问题会导致PHP会话失败?哪些常见问题会导致PHP会话失败?Apr 25, 2025 am 12:16 AM

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

您如何在PHP中调试与会话相关的问题?您如何在PHP中调试与会话相关的问题?Apr 25, 2025 am 12:12 AM

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

如果session_start()被多次调用会发生什么?如果session_start()被多次调用会发生什么?Apr 25, 2025 am 12:06 AM

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

您如何在PHP中配置会话寿命?您如何在PHP中配置会话寿命?Apr 25, 2025 am 12:05 AM

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。

使用数据库存储会话的优点是什么?使用数据库存储会话的优点是什么?Apr 24, 2025 am 12:16 AM

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

您如何在PHP中实现自定义会话处理?您如何在PHP中实现自定义会话处理?Apr 24, 2025 am 12:16 AM

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

什么是会话ID?什么是会话ID?Apr 24, 2025 am 12:13 AM

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

您如何在无状态环境(例如API)中处理会议?您如何在无状态环境(例如API)中处理会议?Apr 24, 2025 am 12:12 AM

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器