2015-10-09 138 views
2

我知道這是不是一個理想的問題,在模擬併發電梯,但我會盡我所能來解釋吧:)代表使用Erlang的消息傳遞

首先,情形是,我一直負責爲用多臺電梯創建一個建築物的模擬。

我們假設我的建築物由2到5部電梯和任意層數組成。這裏的目標是讓「人」登上電梯並前往不同的樓層。

這裏的關鍵是同時運行每個電梯。

我已經設法在C++中爲每個電梯使用一個線程。我正在努力的是想一個簡單的方法來在Erlang中使用消息傳遞來完成此操作。我不是要求代碼的答案,但更重要的是,我如何使用消息傳遞來解決這個問題。我當然試圖閱讀關於這個話題的信息,但是這讓我感到困惑。

到目前爲止我明白線程必須通過消息傳遞給對方進行通信。任何幫助澄清對此的方法非常感謝。這不是評分家庭作業或任何東西,是我的知識練習。

最終問題: 如何建立多臺電梯的編程,使用消息傳遞(在Erlang中)獨立運行。

+0

「[..]在C++中,每個電梯都有一個Thread。」在Erlang,你也會這樣做。這些線程是否相互通信?在Erlang中,你使用消息傳遞。 –

+0

是的,他們做到了。對不起,我意識到,這只是我正在努力如何設計通過消息的電梯交互,這是有點陌生​​的概念,由於某種原因,我不能得到我的頭 –

+0

你的C++線程是如何溝通的? –

回答

2

而是保持共享狀態,你給每個進程自己的狀態,如果有什麼改變了你送與更新(及相關數據),以所有相關過程的消息

什麼丹尼爾呼籲一個進程是一個Erlang進程,而不是一個線程。它們可能看起來像線程,但它們至少與它們相似,因此最好稱它們爲流程。

當您設計Erlang解決方案時,您需要注意不要攜帶C心靈套裝。 Erlang的意義在於它是一種不同的範例,雖然Erlang本身是用C語言實現的,因此您在Erlang中所做的一切最終都是在C語言中運行的,但重要的是要在很大程度上忘記這一點,並使用Erlang範例。

在C中有東西需要管理,當你不仔細觀察它們時,它們很棘手並且咬你。 Erlang過程非常棒,你可以根據所有的意圖和目的產生無限數量的它們,而且它們並不需要任何照顧。

在丹尼爾說,在您的電梯情景中,爲每個電梯產卵的過程是一個合理的設計。與Erlang一起考慮的事情之一是,像這樣的情況下的numnbers並不重要,一旦你寫了一個模塊來模擬你的升降機,你可以產生2到5個,或者2到500萬個,而你通常與Erlang一起發現它幾乎沒有什麼區別。

我並不是說你不能設計一個破壞的實現,但說實話,一旦你習慣了Erlang,你會發現它確實適合於快速開發,沒有通常的並行和併發陷阱。

當你提升你的升力場景時,正確的方法就是去了解OTP,爲你的升降機使用類似gen_server的東西,以及一個監督者從它那裏產生動力學(或不是)。如果您的電梯崩潰,該過程將自動被替換/重新啓動。這與電梯故障(過程已經死亡,電梯不可用)以及維修工程師到來並修理它(過程重新啓動;電梯再次可用)類似。在電梯中發生故障時,遇到什麼情況可能是一個更高級的話題,對此,有幾種可能的解決方案。

+0

那麼說,但也請將我的評論的內容包括在答案中。評論是不穩定的,他們可以隨時消失;)(即「發送更新消息」部分)。 –

+0

謝謝你們!大幫忙! :) –