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:
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