2017-06-06 104 views

回答

6

the Erlang FAQ

10.8是信息接收的順序保障?

是的,但只在一個過程中。

如果有一個實時進程,並且發送消息A然後發送消息B,則保證如果消息B到達,則消息A在它之前到達。

另一方面,設想進程P,Q和R. P將消息A發送給Q,然後將消息B發送給R.不能保證A在B之前到達。(分佈式Erlang會有一段相當困難的時間如果這是必需的!)

也就是說,如果服務器按照它們到達的順序處理請求,並按處理請求的順序發送響應,那麼發送方將按順序接收響應。

0

erlang 收到子句可以做模式匹配。所以你可以做的是爲你想要接收的每條消息創建一個參考,然後對該參考進行模式匹配。

看看這個gist如果你看第26行,你會看到receive子句正在等待帶有特定pid的消息。在這種情況下,消息將以任意順序到達,但憑藉此接收,它們將被整理。