這可能是一個非常基本的問題,但是Erlang能夠在另一個prcoess上調用一個方法,並等待它返回一些沒有睡眠線程的對象類型?Erlang併發模型
0
A
回答
1
那麼,如果你是等待作爲答案,調用過程將不得不最終睡覺......但這沒什麼大不了的。
當進程卡在receive
循環中時,其他進程可以工作。實際上,有數千個進程只是在等待消息的情況並不罕見。由於Erlang進程不是真正的操作系統線程,它們非常輕便,所以性能損失很小。
事實上,睡眠的實現方式是這樣的:
sleep(Milliseconds) ->
receive
% Intentionally left empty
after Milliseconds -> ok
end.
1
是的,這是可以窺視到郵箱,如果這是你的意思。假設我們已經發送了一條消息給另一個進程,現在我們想知道另一個進程是否已經向我們發送了一些消息。但是,我們不希望塊在接收:
receive
Pattern -> Body;
Pattern2 -> Body2
after 0 ->
AfterBody
end
會試圖匹配的郵箱Pattern
和Pattern2
。如果沒有匹配,它會立即超時並轉至AfterBody
。這使您可以實現對郵箱的無阻塞窺視。
如果過程是gen_server
,當回調返回到gen_server
的控件時,通過播放內部狀態和Timeout
設置可以實現同樣的效果。您可以設置0
的超時來實現此目的。
0
從問題得到的是我們正在談論的Synchronous Message Passing
。是! Erlang可以很好地完成這項工作,它是處理Erlang中最基本的併發處理方式。考慮這個下面:
rpc(Request, To)-> MySelf = self(), To ! {MySelf,Request}, receive {To,Reply} -> Reply after timer:seconds(5) -> erlang:exit({error,timedout}) end.
上面的代碼示出了一個進程將消息發送到另一個,並立即進入等待(用於應答),而不必睡覺。如果它在5秒內沒有得到答覆,它將退出。
相關問題
- 1. 併發模型:Erlang vs Clojure
- 2. 併發模型:Erlang,Elixir和Scala
- 3. Erlang併發理解
- 4. nodejs中的併發模型
- 5. Erlang新手 - 併發和消息傳遞
- 6. erlang和餐飲哲學家的併發
- 7. Erlang併發和核心管理
- 8. Erlang:發送消息給模塊?
- 9. Erlang mime類型
- 10. Erlang rb模塊
- 11. 將觸發器合併到模型中
- 12. Akka作爲Clojure的併發模型
- 13. 的ActionScript 3(AS3)併發模型
- 14. Java內存模型和併發讀取
- 15. Actor併發模型和緩存
- 16. 並行Erlang代碼
- 17. 類型檢查Erlang
- 18. Erlang顯示器類型
- 19. erlang gen_tcp發送問題
- 20. Erlang - 隨機數發生器
- 21. Erlang發佈最佳實踐?
- 22. RabbitMQ Erlang分發失敗
- 23. Erlang emacs模式 - 設置outdir
- 24. Erlang文件追加模式
- 25. 從一個Erlang模塊
- 26. Erlang模式匹配錯誤?
- 27. Erlang模式匹配bitstrings
- 28. Erlang模式匹配問題
- 29. Erlang翻譯:Vi模式
- 30. 模擬基本錯誤,Erlang
*我給出答案答案*回答* Mike Dotnet *。世界到底是什麼? –