erlang 中 receive 代码块

receive代码块是如何执行的呢? 

 

process会尝试从它的mail-box中循环取出消息进行pattern match: 

1.若某一条消息pattern match成功,该条消息将从mail-box中移除并且执行相应的Expression,然后退出receive代码块(先前未匹配的消息,会重新放入mailbox) 

2.若没有一条消息能够pattern match成功(或者mail-box中根本没有消息),则process阻塞在receive代码块(等待新消息),若在Time的时间范围内,依然没有消息能够pattern match,就执行超时处理TimeOutExpr,最后退出receive代码块 

after 1000:      
表示若在1s中内没有消息能够pattern match ,则进行超时处理 
after 0:             
表示若mail-box中没有消息能够pattern match ,则立马进行超时处理 
after infinity: 

表示若mail-box中没有消息能够pattern match ,则一直阻塞,直到有一条消息能够pattern match(这种情况等价于不写after,是receive代码块的默认操作) 

参考:

http://diaocow.iteye.com/blog/1757382

你可能感兴趣的:(erlang)