当前位置:   article > 正文

Generator做为状态机与普通状态机的区别及实现_系统genrator是干嘛的

系统genrator是干嘛的

状态机(有限状态交替变化)有限状态自动机,每运行一次 改变一次状态
什么是状态机
以操作系统中的任务调度为例来说明什么是状态机。在操作系统的任务调度中经常见到状态机,其作用是根据任务的状态和当前资源条件来改变任务的状态。任务的状态和资源的条件就构成了一个状态机,参见下图:
在这里插入图片描述

  1. 普通状态机:要依赖于外部的变量,所以导致状态不安全
    代码实现:
 var flag=true;
		function clock(){
		    if(flag){
		        console.log("开",flag)
		    }
		    else{
		        console.log("关",flag)
		    }
		    flag=!flag;
		}
		clock()
		clock()
		clock()
		clock()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

输出结果:
在这里插入图片描述
因为其状态机是通过外部变量flag的赋值才得以改变状态机的状态的,所以是依赖于外部的变量的,会导致状态的不安全,代码如下测试,加上改变状态的语句flag=true;,测试结果:

var flag=true;
		function clock(){
		    if(flag){
		        console.log("开",flag)
		    }
		    else{
		        console.log("关",flag)
		    }
		    flag=!flag;
		}
		clock()
		flag=true;
		clock()
		clock()
		clock()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

结果:
在这里插入图片描述
2.Generator 函数实现的状态机:
状态维护在generator函数内部,外部无法修改,状态是安全的

function* generator_clock(){
		    while(true){
		        console.log("开")
		yield;
		console.log("关")
		yield;
		    
		    }
		}

		var gclock=generator_clock();
		gclock.next();
		gclock.next();
		gclock.next();
		gclock.next();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

结果:
在这里插入图片描述
tip:generator状态机是generator的一大作用,可以把Generator函数理解为一个状态机,他的内部封装了多个状态,当我们执行Generator函数时,他会返回一个迭代器对象,可以遍历他的内部状态
比如:
function* myGenerator(){
yield “hello”;
yield “world”
return “ending”
}
var mG=myGenerator()
console.log(mG.next())
console.log(mG.next())
console.log(mG.next())
console.log(mG.next())
结果:
{ value: ‘hello’, done: false }
{ value: ‘world’, done: false }
{ value: ‘ending’, done: true }
{ value: undefined, done: true }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/550034
推荐阅读
相关标签
  

闽ICP备14008679号