php生成器
来源:互联网 发布:win10安装ubuntu子系统 编辑:程序博客网 时间:2024/05/15 12:42
yield的中文文档在这里:http://php.net/manual/zh/language.generators.overview.php
查看文档,能知道yield的一个功能就是能有效的降低迭代的内存开销。比如官网的这个xrange例子:
这里的xrange是一个迭代,功能和range是一样的,如果使用range函数的话,那么函数内部实现会储存每个迭代的中间过程,即每个中间变量都有个内存空间,那么首先程序使用的内存空间就大了,而且分配内存,回收内存都会导致程序的运行时间加长。但是如果使用上yield实现的xrange函数的话,里面所有的中间变量都只使用一个内存$i,这样节省的时间和空间都会变小。
那么为什么yield会有这样的效果呢?联想到lua中的yield,这里就算是协程的概念了。在lua语言中,当程序运行到yield的时候,使用协程将上下文环境记录住,然后将程序操作权归还到主函数,当主函数调用resume的时候,会重新唤起协程,读取yield记录的上下文。这样形成了程序语言级别的多协程操作。php 5.5这里的yield也是同样的道理,当程序运行到yield的时候,当前程序就唤起协程记录上下文,然后主函数继续操作,只是php中没有使用如resume一样的关键字,而是“在使用的时候唤起”协程。比如上例中的foreach迭代器就能唤起yield。所以上面的这个例子就能理解了。
其实照着引用yield来说,好多内部函数,特别是迭代有关的函数应该都有可能进行优化。或许后续会有yield版本和非yield版本的实现同一功能的函数把。
0 0
- php生成器
- php生成器
- php 生成器
- php生成器
- PHP生成器
- PHP扩展生成器
- PHP plist 生成器
- PHP二维码生成器
- PHP颜色随机生成器
- PHP生成器、闭包
- php 生成器 入门理解
- php之生成器
- php生成器使用总结
- php生成器使用总结
- php代码生成器
- PHP 生成器语法
- PHP 生成器用法介绍
- 关于PHP trait、生成器
- 2016-04-13T16:00:00.000Z时间格式转换(时差)
- 我的第四次上机实验4-7之百钱百鸡问题
- MVC,MVP,MVVM的比较
- bzoj 4540: [Hnoi2016]序列
- [Magento SQL] 返回sku,price,specialPrice。排除可配置产品和已下架产品
- php生成器
- cf665a 简单模拟
- 密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)
- STL容器的小总结
- OSI模型和TCP/IP网络模型
- Android 异步查询框架AsyncQueryHandler的使用
- php tcpdf error
- Laravel框架写的网站直接放在wampserver环境下路径错误问题
- iOS开发经验总结