最近,Transentia的Blog上發佈了一篇「GPars小試」的文章,做者經過實現「以訛傳訛(Chinese Whispers)」的遊戲,展現了GPars中Actor和Dataflow的使用。node
這個遊戲的規則很簡單:算法
……有一個產生消息的源線程,它經過一系列的中介把消息傳給目標線程,目標線程簡單地把消息再沿着消息鏈傳回來。在傳往目的地的途中,中介向下一個傳遞消息時,可能改動也可能不改動消息,所以最終沿原路返回的消息可能會以預想不到的方式被修改了。 安全
本站已經發布了GPars的系列文章,它的概念和使用都會在這個系列中介紹,在此,我就再也不重複。這裏,咱們主要關注做者對於GPars的一些看法。併發
做者首先採用Actor模型實現了這個遊戲,關於這段代碼,請參見原文。對於該模型,做者有一段很是有趣的話:wordpress
若是你熟悉Web開發,你能夠把Actor認爲是Servlet…… 測試
這種比喻倒也確實形象。對於GPars的Actor,做者的基本見解是:.net
簡單、高效、易寫、易讀。你還想怎麼樣?線程
GPars Actors並不完美(它們缺乏Scala庫的一些更精巧的能力,如監視消息接收的模式匹配,能夠查看入站消息隊列的長度),但它們也不是太寒酸。隊列
接着,做者又用Dataflow從新實現了一遍遊戲。因爲目前GPars這個系列還沒有談到Dataflow,在此簡單的引用一下原文:遊戲
Dataflow併發提供了另外一種併發模型,內建了安全性和健壯性。它把重點放在數據和它們在過程當中的流向,而不是操做數據的實際過程。Dataflow算法把開發者從處理活鎖、競爭條件的過程當中解放了出來,使得死鎖變得有肯定性且100%可復現。若是你在測試中沒有獲得死鎖,那麼在產品環境中你一樣也不會獲得它。
一樣,參考代碼請訪問原文。和前面的實現同樣,你眼前的代碼依舊簡單得讓人吃驚。
中介之間的每一個雙向鏈都被建模成帶有‘up’和‘down’變量的Link。儘管GPars還提供了其餘方式,但就這個例子,我選擇使用普通的「Dataflow變量」,它是「一次寫,屢次讀」的實體……
因爲使用了Grape,Transentia這篇文章的例子均可以直接複製到Groovy Console中直接運行,固然首先請先肯定你的Groovy版本是1.7.1。
請關注本站關於GPars的後續文章,關於本文中所提例子的詳情請查看原文。