Pid ! Msg
用於消息發送,它的意思是,向進程id爲Pid的進程發送消息,該消息爲Msg。例如
Pid ! {inch,3}
表示向進程id爲Pid的進程發送消息{inch,3}
在消息發送之前,消息中的所有參數都會被求值。
因此:
Pid !{2,5*6}
發送的消息是:Pid !{2,30}
receive原語用於接收消息。receive語法如下:
receive
Message1 >
... ;
Message2 >
... ;
...
end
這裏要注意,end前面的語句沒有;這表示嘗試接收一個由Message1、Message2等模式之一描述的消息。對該原語進行求值的進程將被掛起,直至接收到一個與Message1、Message2等模式匹配的消息。一旦找到一個匹配,即對“->”右側的代碼求值。
接收到消息後,消息接收模式中的所有未綁定變量都被綁定。
receive的返回值是被匹配上的接收選項所對應的語句序列的求值結果。
我們可以簡單認爲send發生一條消息而receive接收一條消息,然而更準確的描述則是send將一條消息發送至一個進程的郵箱,而receive嘗試從當前進程的郵箱中取出一條消息。
receive是有選擇性的,也就是說,它從等候接收進程關注的消息隊列中取走第一條與消息模式相匹配的消息。如果找不到與接收模式相匹配的消息,則進程繼續掛起直至下一條消息到來——未匹配的消息被保存用於後續處理。