2010-11-02 51 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的演员正好具有内置的优先顺序:而不是重写一个单独的“行为”方法,有许多不同的方法(不确定确切的名字),这些方法可以依赖于动作的实现优先。

我不知道这是否解决了扫描放缓问题虽然