我在Scala中创建了以下演员示例:http://pastebin.com/pa3WVpKy 没有限制(减少SendMoney消息的数量)在行中出现:
val processed = iterations - counter.getCount/2
if (processed < i - banksCount * 5) Thread.sleep(1)
此测试中的消息处理非常缓慢(特别是当银行角色很少时)。
这是因为演员的邮箱中充满了SendMoney消息,并且接收ReadAccountResponse消息需要很长时间(它们通常几乎位于邮箱的末尾,并且必须扫描整个邮箱)。 在这种情况下如何改善邮箱扫描时间? 也许有可能将某些消息定义为高优先级? 有两个邮箱会很棒 - 一个用于普通邮件,一个用于高优先级邮箱。可以先扫描高优先级邮箱。 “回复”方法也可以自动向高优先级邮箱发送消息。或者也许创建两个邮箱 - 通常的消息和响应? 你的意见是什么?
此致 WojciechDurczyński
答案 0 :(得分:2)
这个问题的一个可能很好的解决方案是Phillip Haller的translucent functions,其中scala编译器反射性地公开有关匹配表达式可以匹配的对象类型的信息。然后,可以通过消息类索引actor邮箱,并且查找可能会大大加快,特别是在这种“大海捞针”场景中。
这是API for TransluncentFunction,你可以看到它很简单。似乎Translucent project已经暂停了一段时间,让我们希望它很快再次亮相!
答案 1 :(得分:0)
我认为Lift的演员确实内置了这个优先级:而不是覆盖单个“act”方法,有许多不同的方法(不确定确切的名称)可以根据动作的优先级来实现
我不确定这是否解决了扫描减速问题