2009-02-20 99 views
21

最近我已經進入支持演員/代理/無共享體系結構的替代語言 - 即。 scala,clojure等(clojure也支持共享狀態)。基於Agent/Actor的併發設計的設計模式

到目前爲止,我所閱讀的大多數文檔都集中在介紹級別。我正在尋找的是四人幫的更先進的文檔,但沒有任何基礎。

爲什麼?它有助於挖掘設計思維的變化。簡單的例子很容易,但在真實世界的Java應用程序(單線程)中,您可以擁有1000個具有複雜關係的成員的對象圖。但是基於代理的併發開發,它引入了一套全新的想法來理解大型系統的設計。即。代理粒度 - 一個代理應該管理多少狀態 - 對性能等的影響,或者是將共享狀態對象圖映射到基於代理的系統的良好模式。提示將域模型映射到設計。討論不是關於技術,而是更多關於如何在設計中使用該技術(現實世界「複雜」的例子會很棒)。

回答

1

我問了一個類似的問題here,它有一些合理的答案可能有幫助。我正在仔細觀察你的。我還沒有找到真正幫助我的東西,但我非常積極地尋找。

我頭腦裏想的移位是最大的障礙,加強對並行體系結構和語言,直到有裂縫的開發商正打算與易粘學習MS風格的範例。爲了真正成爲主流,它需要進入學校並與C#和VB一起進行教學。我的答案是2080 programmers question是「同時」。

10

即使我不能拿出任何好的現實世界的例子,直接爲您提供設計 模式,有幾個地方開始。

第一個是讓你的頭正確包圍概念。一本幫助 的書是Making reliable distributed systems in the presence of software errors ,由Erlang Guru Joe Armstrong編寫,其中以非常容易理解的方式解釋了面向併發的編程 。它實際上是一位博士。論文,但不要讓這些嚇到你。 與大多數常見的課本相比,閱讀和閱讀便宜得多。

看着實際的系統通常意味着你必須學習太多關於實際的 語言,因爲評估事物也是有意義的。對於Erlang,documentation 提供了設計方法和行爲(設計模式庫的Erlang speek)。 這將說明在此設置中最常用的設計模式。這些 已被證明在構建大型系統,即數百萬行代碼(可比較其他語言如Java的4到10倍)以及在分佈式機器羣集中的一臺機器上運行的毫微秒併發進程方面是有效的。 一個最新的實時系統的例子是Facebook Chat

對於其他框架我不能真正幫助你,我害怕。

+0

臉書聊天聽起來很有趣。當你看到chat/pbx設計的問題時,「交互」對象成爲一個很好的「代理人」,因爲交互在大多數情況下都是自成體系的(政黨,各方fsm等)。很高興看到他們做了明智的設計。 – nso1 2009-03-17 02:26:06

4

「actor」本身就是併發編程的統一模式(異步消息隊列加上處理它的執行上下文),但是有許多設計模式可以幫助指定基於代理的系統的方面或元素。許多最常見的可以在維基百科關於Concurrency Patterns的文章中找到。一些亮點:

如果你還沒有越過它已經來了,Akka可能是你的興趣 - 它是一個運行在JVM上的「純粹」事件驅動的actor框架。