yeild 理解

yeild 理解生成器 yield 关键字不是返回值 他的专业术语叫产出值 只是生成一个值每次被加载到内存中的文字只有一行 大大的减小了内存的使用 这样 即使读取上 G 的文本也不用担心 完全可以像读取很小文件一样编写代码 百万级别的访问量 yield 生成器是 php5 5 之后出现的 yield 提供了一种更容易的方法来实现简单的迭代对象 相比较定义类实现 Iter 优点 生成器会对 PHP 应用的

生成器yield关键字不是返回值,他的专业术语叫产出值,只是生成一个值

每次被加载到内存中的文字只有一行,大大的减小了内存的使用。这样,即使读取上G的文本也不用担心,完全可以像读取很小文件一样编写代码。

 百万级别的访问量

yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iter

优点:

  • 生成器会对PHP应用的性能有非常大的影响
  • PHP代码运行时节省大量的内存
  • 比较适合计算大量的数据

function createRange($number)
{ $data = [];

  for($i=0;$i<$number;$i++)
  {
    $data[] = time();
  }
    return $data;
}













$result = createRange(10); // 这里调用上面我们创建的函数 foreach($result as $value){ sleep(1);//这里停顿1秒,我们后续有用 echo $value.'
'; }

输出的结果是10个一样的时间戳,sleep(1)效果看不出来

function createRange($number){ for($i=0;$i<$number;$i++){ yield time(); } } $result = createRange(10); // 这里调用上面我们创建的函数 foreach($result as $value){ sleep(1); echo $value.'
'; }

输出的结果中间间隔了1秒

我们来还原一下代码执行过程。

  1. 首先调用 createRange 函数,传入参数10,但是 for 值执行了一次然后停止了,并且告诉 foreach 第一次循环可以用的值。
  2.  foreach 开始对 $result 循环,进来首先 sleep(1) ,然后开始使用 for 给的一个值执行输出。
  3.  foreach 准备第二次循环,开始第二次循环之前,它向 for 循环又请求了一次。
  4.  for 循环于是又执行了一次,将生成的时间戳告诉 foreach .
  5.  foreach 拿到第二个值,并且输出。由于 foreach 中 sleep(1) ,所以, for 循环延迟了1秒生成当前时间

所以,整个代码执行中,始终只有一个记录值参与循环,内存中也只有一条信息。

无论开始传入的 $number 有多大,由于并不会立即生成所有结果集,所以内存始终是一条循环的值。

转载于:https://www.cnblogs.com/hanmengya/p/10947835.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224102.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:41
下一篇 2026年3月17日 下午12:41


相关推荐

  • 校园网络项目设计方案

    校园网络项目设计方案校园网络项目设计方案制作 80 组全体成员用户需求概述 1 北京市商业学校目前大约有师生 5000 多人 在办公环境中 需要组建网络来实现信息化办公 新办公室为同一楼层的平面办公环境 办公区内的水平布线系统已经具备 2 用户需求描述北京市商业学校内办公建设项目的要求是实现畅通 高效 安全 可扩展的办公网络 各部门共享各种资源 提高办公效率 网络系统运行必

    2026年3月17日
    2
  • 科大讯飞:“星火行业分析师”通过工信部认证,已在多家央国企上岗

    科大讯飞:“星火行业分析师”通过工信部认证,已在多家央国企上岗

    2026年3月14日
    3
  • softmax、softmax损失函数、cross-entropy损失函数[通俗易懂]

    softmax、softmax损失函数、cross-entropy损失函数[通俗易懂]softmaxsoftmax,顾名思义,就是soft版本的max。在了解softmax之前,先看看什么是hardmax。hardmax就是直接选出一个最大值,例如[1,2,3]的hardmax就是3,而且只选出最大值,非黑即白,但是实际中这种方式往往是不合理的,例如对于文本分类来说,一篇文章或多或少包含着各种主题信息,我们更期望得到文章属于各种主题的概率值,而不是简单直接地归类为某一种唯一的主题。这里就需要用到soft的概念,即不再唯一地确定某一个最大值,而是为每个输出分类

    2022年6月26日
    35
  • Mininet实验

    Mininet实验MininetB 站入门视频 docker net 支持 docker 容器的 mininet 版本 iperf 绘图工具 gnuplot sudoaptinsta dpctl 介绍参考文章 https zhuanlan zhihu com p 在 SDN 中 交换机是没有控制面的 也就是说它仅是一个纯粹的转发设备 并且这种 OpenFlow 交换机只有在收到 SDN 控制器的指示后 才能做出转发决定 遇到未知流量时 OpenFlow 交换机只会将

    2026年3月19日
    1
  • 【转载】C#相等性比较

    【转载】C#相等性比较

    2021年11月21日
    49
  • postgresal去重_postgresql数据库去重方法

    postgresal去重_postgresql数据库去重方法数据库去重有很多方法,下面列出目前理解与使用的方法第一种通过groupby分组,然后将分组后的数据写入临时表然后再写入另外的表,对于没有出现再groupby后面的field可以用函数max,min提取,效率较高–适合情况:这种情况适合重复率非常高的情况,一般来说重复率超过5成则可以考虑用这个方法–优点:对于重复率高的数据集的去重,十分推荐用这种方法–缺点:uuid不能用max或min提取…

    2022年10月1日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号