2015-11-03 133 views
1

什麼時候嘗試從其消息隊列中提取或回滾消息的進程的「事務」?換句話說,消息隊列中消息的永久消息在哪個執行點上?Erlang消息處理事務

+0

這裏有一個相當不錯的寫在機制底層接收這裏:http://ndpar.blogspot.co.za/2010/11/erlang-explained-selective-receive.html – tonys

回答

3

通過接收呼叫讀取它時。

如果消息在消息隊列中,並且被調用接收的進程讀取,那麼它只是內存操作,並且沒有其他進程可以爭用數據,因此它沒有事務性質;沒有必要鎖定或回滾等,但因爲它只是內存操作,所以無關緊要。

您使用的語言讓我擔心您認爲有更多的保證。重要的是要記住,在基本的消息發送和接收級別(OTP可能提供的頂層沒有任何額外的層,或者您可能會自己寫),您發送的消息沒有任何保證,它們將被髮送,或者您發送的進程甚至存在。

+0

換句話說,沒有「回滾」,並且當一個接收匹配時,郵件將永久地從郵箱中刪除。 – egbokul

+0

實質上,當匹配時,消息從隊列傳遞到變量,不存在任何形式的回滾。 – Michael

+0

「沒有其他進程可以爭奪數據,因此它沒有事務性質」,這是不正確的,請考慮外部觀察者,他們可以檢查郵箱狀態或檢查郵件數量並根據此數據做出決定。也許進程本身在接收過程中處於暫停狀態,在這種情況下,當郵件實際上從郵箱中刪除時,它確實有所幫助。 – egbokul