2010-11-02 26 views
2

我創建以下Scala中例如演員的郵箱掃描時間:http://pastebin.com/pa3WVpKy 沒有節流(降低SendMoney消息數)發生在線路:在本試驗如何提高Scala中演員

val processed = iterations - counter.getCount/2 
if (processed < i - banksCount * 5) Thread.sleep(1) 

消息處理是非常緩慢(尤其是銀行演員很少時)。

這是因爲參與者的郵箱中充滿了SendMoney郵件,並且接收到ReadAccountResponse郵件需要很長時間(他們通常幾乎在郵箱的末尾,並且必須掃描整個郵箱)。 如何在這種情況下提高郵箱掃描時間? 也許有可能將某些消息定義爲高優先級? 擁有兩個郵箱真是太棒了 - 一個用於常用郵件,另一個用於高優先級郵箱。可以先掃描高優先級郵箱。 「回覆」方法也可以自動將郵件發送到高優先級郵箱。或者可能創建兩個郵箱 - 用於常見的消息和響應? 你的想法是什麼?

問候 沃伊切赫Durczyński

回答

2

的一個潛在很好地解決這一問題將是菲利普哈勒的translucent functions,其中Scala編譯器反思暴露出什麼類型的對象匹配表達式可以匹配信息。然後,可以通過消息類對索引郵箱進行索引,查找可能會大大加快,特別是在這種「大海撈針」場景中。

這是API for TransluncentFunction,你可以看到它很簡單。看起來Translucent project已經停滯了一段時間,讓我們希望它很快恢復!

+0

這是完美的答案。謝謝。 – 2010-11-03 07:47:05

+0

有意投票重新啓用半透明項目的人?請在此處投票:https://lampsvn.epfl.ch/trac/scala/ticket/3976 – 2010-11-03 11:02:44

0

我相信Lift的演員正好具有內置的優先順序:而不是重寫一個單獨的「行爲」方法,有許多不同的方法(不確定確切的名字),這些方法可以依賴於動作的實現優先。

我不知道這是否解決了掃描放緩問題雖然