[计院]国际周之FSP

129 阅读2分钟

一、协程

Coroutine(协程)是一种用户态的轻量级线程,特点如下:
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=1
range T = 0..N
range R = 0..2*N
Sum=(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}.