1.编程语言的每个规则出现,确定是为了能解决一部分问题,咱们学习编程语言也应该是带着疑问去学习。编程
为何会有带超时的receive,是由于:编程语言
有时若是摸个message迟迟不来,receive就可能进入无限的等待之中。形成这种状况有几种缘由。多是某个程序内部逻辑有问题,或者,那个准备发送message的进程在发送Message以前挂掉了。函数
因此,便有了这个带有超时的receive。这样就解决了上述问题。学习
2.那么,这个带有超时的receive是什么样子的进程
以下:it
receiveio
Pattern1 [when Guard1]->程序
Expressions1;im
Pattern2 [when Guard2]->语言
Expressions2;
...
after Time ->
Expressions
end
若是在进入receive的表达式后,在Time所规定的毫秒数内,未接收到可以匹配的消息,那么进程就会中止等待,并对Expressions进行求值。
3. 了解了以上两点后,咱们就要系统了解这个receive超时的类型了
分为一下几种:
你能够写出一个只有超时的receive语句,使用这个语句,咱们能够定义一个sleep(T)函数,用它让当前进程暂停Tms
sleep(T)->
receive
after T ->
true
end.
一个超时时间为0的语句会当即触发一个超时,但在此以前,系统会尝试对邮箱进行模式匹配。咱们能够用这个特性来定义一个flush_buffer函数,它能够彻底清空进程邮箱中的全部消息:
flush_buffer()->
receive
_Any ->
flush_buffer()
after 0->
true
end.
若是没有超时子句,在邮箱为空的状况下,flush_buffer会永久暂停,而不会返回,咱们能够用0超时实现一个“优先接收”的程序:
priority_receive()->
receive
{alarm,X}->
after 0->
receive
Any->
Any
end
end.
若是receive语句的超时值被设定为原子infinity,那么系统就永远不会触发超时,在那种超时值,其实是有receive之外的其余语句来决定的程序中。