一、协程
Coroutine(协程)是一种用户态的轻量级线程,特点如下:
A、轻量级线程
B、非抢占式多任务处理,由协程主动交出控制权。
C、编译器/解释器/虚拟机层面的任务
D、多个协程可能在一个或多个线程上运行。
E、子程序是协程的一个特例。
A、轻量级线程
B、非抢占式多任务处理,由协程主动交出控制权。
C、编译器/解释器/虚拟机层面的任务
D、多个协程可能在一个或多个线程上运行。
E、子程序是协程的一个特例。
原来线程的状态切换是通过内核修改线程TCB实现的,这非常消耗CPU资源。
因此设计出协程,由程序自己控制携程的状态切换。
二、FSP动作前缀 ->
举个栗子:
START=(action->STOP). 递归(形成圆圈):
SWITHC=OFF,OFF=(on->ON),ON=(off->OFF). 最简化:SWITCH=(on->off->SWITCH).更多状态:
Trfficlight=(red->yellow->green->orange->Trfficlight).三、FSP选择 |
用于:不同动作,达到不同状态。
1.确定性选择:
举个栗子:
情景:一台饮料机,有红色和蓝色两种按钮,按下红色买咖啡,按下蓝色买茶。
实现:
Choice=(red->coffee->Choice |blue->tea->Choice).2.非确定性选择:
举个栗子:
情景:抛硬币。
实现:
Coin=(toss->head->Coin|toss->tail->Coin).非确定性可以用于应对故障:
Begin=(in->Begin|in->out->Begin).四、FSP索引
BUFF = (in[i:0..3]->out[i]->BUFF).举个栗子:
定义范围的索引:
const N=1range T = 0..Nrange R = 0..2*NSum=(in[a:T][b:T]->Total[a+b]),Total[s:R]=(out[s]->Sum).五、FSP保卫行为
增加判断条件,当条件为真时才执行。
举个栗子:
1.
Count(N=3)=Count[0],Count[i:0..N]=(when(i<N) inc->Count[i+1] | when(i>0) dec->Count[i-1]).2.
Count(N=3)=(start->CountDown[N]),CountDown[i:0..N]=(when(i>0) tick->CountDown[i-1] | when(i==0) beep->STOP | stop->STOP). //任何时候可以选择执行stop达到STOP的状态六、FSP处理字母拓展
WRITER = (write[1]->write[3]->write[2]->WRITER) +{write[0..3]}.七、并行组合-动作交织 ||
|| 符号可使几件事情并发执行。
A=(scratch->STOP).B=(think->talk->STOP).||A_B=(A||B).共享动作:
A=(make->ready->used->A).B=(ready->use->used->B).||A_B=(A||B).八、创建流程实例:
Switch=(on->off->Switch).||Two_Switch=(a:Switch||b:Switch).九、动作重新标记 /
CLIENT = (call->wait->continue->CLIENT).SERVER = (request->service->reply->SERVER).||CLIENT_SERVER = (CLIENT || SERVER) /{call/request, reply/wait}.