当两个进程P,Q需要并行计算时,使用 P | | Q来表现这两个进程是并行的。
为了创建一个并行程序,需要重新创建一个进程,但是这个进程前面要加入||来表现这是一个存在并行的并行程序。如果P为并行程序,||P为其书写方式。
在并行时,FSP会让两个进程交错进行。比如在上面的例子中,两个进程总共用3个行为(atomic action),所以并行后的输出为:
重点1: 为3个actions的交叉排列组合。但是注意:行为的顺序必须与原进程中一致,比如:
在CONVERSE进程中有:think->talk->STOP这样的action执行顺序。所以在并行计算中绝对不能出现talk在think之前的情况。
重点2: 由于时两个进程的交错,相同名字的行为(atomic action)只会,执行一次!因为在FSP中,如果你的action名字相同,将会被系统识别为同样的行为。
把上面的FSP用LTS generated出来表现为:
基本的并行公式:
共享行为(share action):
当两个进程中的一个行为同名时,他们并行处理时就会把这两个同名的行为当成一个行为处理,这是会把这样的行为(aciton)成为一个共享行为(share action)。当所有非share action在并行处理时会随机交错排序时,共享行为必须所有有这个行为的进程同时处理。所以控制共享行为就是建模一个有并行交互进程的系统的关键。
共享行为例子:
在这个信号灯系统就是一个有共享行为的系统。 button action 在其中就是一个共享行为。观察后可以发现,只有当PEDESTRAIN(行人) 按button时,TRAFFIC_LIGHT进程才有可能进入YELLOW并进入一轮循环,否则就是一直在GREEN。
对行为改名(relabel):
在不同对行为中,有可能出现两个行为虽然名字不同,但是当并行处理时他们对于FSP系统来说是等价的东西。比如在上面的例子中。行人的 wonder行为 和信号灯的idle行为是等价的。所以在把这两个进程并行处理时,可以对这两个行为改名,但不改变他们本来的名称从而让他们在别的进程中不因为改名出现问题(eg:行人的徘徊行为变成了信号灯空转)。让他们等价。这个行为就叫 relabel。
做法:
假设一个进程P: P/{new1/old1,...newN/oldN} 这样就能吧old 名改成new了
eg:
这个就和前两个章节的图一样了。
进程改名
对于一个多进程系统,很多时候我们需要对同一个进程复制多封,从而达成并行运算的目的。
举例:
假设有一个服务系统,服务系统中有客户和服务器:
生成的图为:
创建多个有不同标签的同一进程:
如果我们需要多个客户同时访问这个系统怎么办?直接创建一个两个client并行的进程会怎么样:
我们需要两个客户同时在这个并行系统中,但是由于两个进程有着相同的行为,更具上面的share action规定,此时两个client的行为和单个没有区别,因为都是share行为!
所以我们需要对这两个不同的client 改名,从而让他们成为互相独立的两个进程。
改名方法:
假设进程P: (a:P) 意味着给进程P带上a的labels。
eg:
创建了两个有不同标签a和b的client,并让他们并行运行了
使用range方法同时创建多个多个进程:
这样可以同时创建N个有不同标签的Client 进程。标签为c[N]
给单个进程的行为取多个名字
现在我们有多个client了,这时我们需要server来处理它。但是此时每个client现在有着不同名字的action了,没法通过改行为名的方法来让他们成为共享行为了!比如以前的call action变成了: c[1] action和c[2] action. 此时我们怎么通过对server行为改名(relabel)方法来让client和server互动?我们不能再创建两个server,因为我们希望这多个client来访问同一个server。
有一种新的语法可以做到这个: {a1,..a2x}::P
这个方法可以让Process P中的所有行为都被改名,假设有一个行为n,这个行为会被改名为:{a1.n,a2.n,..,ax,n} -> X 。此时的{ }中是一个array,这个array中的每个元素都会与 -> X组合成为一个新的action,(从而适应创建多个client 产生的多个名称的行为!
举例:
现在多个clinet就可以和server互动了。因为产生的复数不同名action 在server中都有相对的对应,从而产生共享行为share action。
变量隐藏:
假设一个变量P,我们可以通过P\{a1,..aN} 来使得这个Process中的这几个action被移除。这些移除的行为不会被共享。也可以通过P@{a1,..,aN}来保留特定啊action,移除其余的。被移除的action会全部改名为:tau,不会被共享。
举例: