: :其他软件 2020-09-09 12:06:13
状态机(有限状态交替变化)有限状态自动机,每运行一次 改变一次状态
什么是状态机?
以操作系统中的任务调度为例来说明什么是状态机。在操作系统的任务调度中经常见到状态机,其作用是根据任务的状态和当前资源条件来改变任务的状态。任务的状态和资源的条件就构成了一个状态机。
普通状态机:要依赖于外部的变量,所以导致状态不安全
代码实现:
var flag=true;
function clock(){
if(flag){
console.log("开",flag)
}
else{
console.log("关",flag)
}
flag=!flag;
}
clock()
clock()
clock()
clock()
输出结果:
因为其状态机是通过外部变量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()
结果:
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();
结果:
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 }
TAG: Generator,状态机,区别
09-30qp状态机代码
09-28c语言状态机资料.pdf
09-16stm8l四按键状态机实现
11-28从易语言转学火山,详解易语言与火山软件开
11-21PS滤镜插件Grid Generator
08-27wps中打印和直接打印有什么区别
11-26PPT动态按钮和超链接有什么区别
11-13WORD调整表格根据内容和根据窗口区别
09-13dapp数据库和mysql有什么区别
09-07APP和Web测试系统结构方面的区别
09-07android和iOS测试的常识性区别