2014-04-23 121 views
2

我知道Erlang進程消息是同步的。 當我做Erlang進程發送消息

Pid!消息

  1. 現在
  2. 發送消息線程將確認該消息已經把在PID的消息隊列,然後返回發送消息線程的回報。

發送消息線程會選擇哪個選項?

回答

3

我相信你的理解可能是錯誤的。 Erlang消息傳遞是異步。 例如看看here。 要回答你的問題,那麼選項號碼是這裏發生了什麼。

+0

I意味着進程處理自己的消息隊列。它是同步的。 – baotiao

+3

發件人不一定直接與收件人的郵箱進行交互。即使它們在同一個Erlang虛擬機上,也可能存在傳輸的中間步驟以避免內部鎖定。消息傳遞是完全異步的,甚至不保證消息已經到達目標郵箱。 – RichardC

+0

@RichardC您同意選項1?這樣對嗎? – baotiao

0

我覺得

發送消息線程回報現在。

是對的。

因爲Pid ! message只是將message放入進程Pid的消息隊列中。過程Pid將使用receive來檢查其消息隊列。這與發送過程沒有任何關係。

+0

我同意你的看法,但是當許多進程想要將消息發送到Pid的消息隊列時。這些過程爭取將消息放入Pid的消息隊列中的權利。所以一些進程可能會稍等片刻。 – baotiao

2

在Erlang中,消息傳遞是異步的。 發件人從不阻止。郵件遞送是而不是保證。注意事項:

  • 如果發送本地進程消息,那麼在實踐中,消息總是到達並且非常快速地執行。
  • 如果發送遠程進程消息,則消息將排隊等待發送。但由於TCP和分發的性質,並不保證消息將被另一方傳輸和處理。