当前位置: 首页 > news >正文

网站描述在哪里写东莞住建局网

网站描述在哪里写,东莞住建局网,网站建设w亿玛酷1负责,wordpress插件分享显示图片概念: Generator:带 yield的function yield:Generator或task的中断关键字,执行到yield时一次调度周期执行完即阻塞,并返回右侧表达式结果,等待下一次调度器运行next()或迭代遍历才会继续往下执行&#xff0…

概念:

        Generator:带 yield的function

        yield:Generator或task的中断关键字,执行到yield时一次调度周期执行完即阻塞,并返回右侧表达式结果,等待下一次调度器运行next()或迭代遍历才会继续往下执行,直至Generator所有迭代或yield语句全部执行完毕

        valid():返回bool值,表示Generator是否未完成,即是否有yield等待执行,(若是Generator创建之后第一次执行此方法,则会从Generator内开始处到第一次yield出现的地方,相当于rewind() 一次)

        current():返回Generator当前值,即yield右侧表达式的值,并且会 执行 上一次yield到本次yield之间的部分(若是Generator创建之后第一次执行此方法,则会从Generator内开始处到第一次yield出现的地方,相当于rewind() 一次)

        rewind():重置Generator状态回到最开始状态,即第一个yield 执行前

        next():执行一次yield之后的代码直到下一次yield停止,yield 下边的代码不会执行 (若是Generator创建之后第一次执行此方法,则会从Generator内开始处到第一次yield出现的地方,相当于rewind() 一次,然后再往第一个yield下面继续执行一次,直到遇到第二个yield停止)

        yield from:后边跟普通数组,或者跟一个Generator 组成嵌套生成器结构,不希望去手动调用Generator的current(),那么在Generator前 使用 yield from 交给上游(框架)来解决。

        send(data):发送data到generator内部,generator接受数据data后,完成 yield->data的替换,并继续从当前中断的yield处往下再执行一次迭代,直到遇到下一次yield(当前执行的是generator的最后一次yield时,会直接完成generator所有迭代,此时valid()返回false)

function A(){echo 'In A before of loop'.PHP_EOL;for($i=0;$i<2;$i++){echo 'In A in loop up'.PHP_EOL;yield;echo 'In A in loop down'.PHP_EOL;}echo 'In A after of loop'.PHP_EOL;
}
$a = A();
// var_dump($a->valid());
// var_dump($a->current());
$a->next();
// $a->next();
// var_dump($a->current());
// $a->valid();
// $a->valid();
// $i = 0;
// while(true){
// 	if($a->valid()){
// 		$i++;
// 		echo '第 '.$i.' 次执行next()';
// 		$a->next();
// 	}else{
// 		break;
// 	}
// }
echo PHP_EOL.'All done'.PHP_EOL;

        yield from:后面跟一个数组,创建一个临时Generator实例,每次迭代时依次返回数组的每个元素

//yield from
function test()
{yield from [1, 3, 5, 7];
}$a = test();
var_dump($a->current());
$a->next();
var_dump($a->current());

//通过使用php yield + 异步非阻塞select()单线程发送多个socket请求并统一获取返回结果,大佬写的示例代码:

PHP Generator Yield Demo: PHP 生成器 yield 语法Demo

//异步非阻塞,yield实现的事件循环统一监听多个socket请求状态的例子:

小白要生发icon-default.png?t=N7T8https://segmentfault.com/a/1190000022979052

yield事件监听实现 promise::All()的意义:

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

promise::All() 核心代码:

/*** all()返回的是一个generator,外面的事件循环监听到任意一个 promise状态变更都会调用此 * generator的send()方法,从事件监听到的数据传入到此generator内部*/
public static function all(...$promises){$re = array();foreach ($promises as $promise){//此处yield将会被send()传递的数据代替,作为promise状态结构收集数组中的一员保存起来,//当所有promise的结构都是完成状态后,此循环中的所有yield即迭代完成,即完成异步多个事件的结果收集,返回结果$re[] = yield;}/*** @var Promise $promise*/$promise = null;foreach ($promises as $promise) {foreach ($re as $param) {//由于promise的收集结果不是按原始顺序排列,而是谁先收到数据谁向结果中写入,此//处需要使用特殊标记 streamName 来作promise和对应结果的匹配和关联,并返回给外//部一个最终结果if ($param['streamName'] == $promise->getStreamName()) {$results[] = $param['data'];}}}return $results;}

http://www.sczhlp.com/news/84063/

相关文章:

  • 自己做的网站访问不了墨鱼 主题 wordpress
  • 网站是空间备案wordpress 文章 导航
  • 那些网站h5做的不错济南企业网站制
  • 将网站加入小程序地方型旅游网站
  • 高端网页设计公司关键词优化招商
  • 建网站做联盟活动策划案模板
  • 陈村网站建设wordpress编辑器哪个好用
  • 网站开发工具介绍jp域名
  • 【IEEE出版】第八届机械工程与智能制造国际会议(WCMEIM 2025)
  • openssl编程之hmac算法编程示例
  • 高效管理多站点的秘密武器:站群管理软件实战分享 - 蚂蚁站群
  • 如何做微网站平台功能性质网站有哪些网站
  • 淘宝网站推广工具网站建设作业素材
  • 网站集约化建设题目福建省建住房建设部网站
  • asp.net 4.0网站建设基础教程宁波找网站建设企业
  • e时代网站制作苏州二建建筑集团有限公司
  • 基于 Dify on DMS 快速构建客服对话数据质检服务,完成任务可领取积分、定制手办等好礼!
  • PCTA/PCTP学习笔记-TiDB 数据库核心原理与架构
  • c#项目迁移至Kubernetes之NTLM认证问题解决方案
  • 镜像站群还有用吗:镜像站群技术手记 - 蚂蚁站群
  • 辽宁做网站哪家好打电话沟通做网站
  • 服务器网站80端口打不开广安建设厅官方网站
  • 西宁市建设网站多少钱aws安装wordpress
  • 网站是可以做的吗网站被百度k是什么意思
  • 网站开发后台用什么语言新乡网站推广公司
  • 万网网站建设方案书 备案内容管理系统开发
  • 汕头公司做网站网站开发重点难点
  • 国外有哪些网站是做弱电的黑科技引流工具
  • 梅州市住房与城乡建设局网站找人做软件网站
  • wordpress怎么调用音频邢台网站优化定制