2011-08-09 40 views
6

所以,最近我一直在讀了很多文章關於如何編程的同時是很難的,並與共享狀態併發編程如何幾乎是不可能的。所以像Erlang這樣的語言(我認爲這是對的,如果不是問題仍然有意義)使用Actor模型來實現併發性並且在線程之間沒有共享狀態。現在,在編寫併發系統的時候,我並沒有發現併發性很難 - 但總的來說,我幾乎可以將任何問題都納入生產者/消費者範例,並且沒有太多(如果有的話)共享狀態。雖然這是正確的?線程之間的消息隊列是否實際共享狀態?或者是併發編程的生產者/消費者模型真的是Actor模型的具體例子(這是我真正的問題)。思考?生產者/消費者模型是否等於演員?

回答

4

技術上的共享消息表示總體應用程序的狀態,但只有當生產者和消費者本身無狀態(否則它們只是表示消息共享介質/ a的狀態(多個))。生產者/消費者模型並不是每個生產者和消費者都是演員模型的例子。生產者(也可能是消費者,無論是來自相同的共享消息隊列還是來自外部消息源)都會按照他們所做的操作並吐出一些排隊等待的消息。隊列本身可以被認爲是演員,儘管是被動的,因爲它可以接收/保存消息,並且可以分發它們(或者等待它們被拿走)。消費者是他們從共享隊列中接收/接收消息的角色,並根據這些消息開展工作。

所以基本上我的回答是,生產者/消費者模式是不是演員模型的例子,而是在一個共享的環境中工作,演員的集合的一個例子。

+0

有什麼本質上的演員典範,說你不能有多個演員? – Gandalf

+0

我看到它的方式,對演員模式是比較有代表性的一個實體,而生產者/消費者模式是比較有代表性的一個系統。 – yoozer8

+0

雖然,我想你可以考慮生產者/消費者系統中的演員,如果它存在於與其他實體的大環境下,可以在更大的系統的其他實體交互。 – yoozer8