2

我在 Scala 中创建了以下演员示例:http: //pastebin.com/pa3WVpKy 没有在行中发生的节流(减少 SendMoney 消息的数量):

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

此测试中的消息处理非常慢(尤其是当银行参与者很少时)。

那是因为演员的邮箱里塞满了 SendMoney 消息,接收 ReadAccountResponse 消息需要很长时间(它们通常几乎在邮箱的末尾,必须扫描整个邮箱)。在这种情况下如何提高邮箱扫描时间?也许有可能将某些消息定义为高优先级?最好有两个邮箱——一个用于普通邮件,一个用于高优先级邮件。可以先扫描高优先级邮箱。“回复”方法也可以自动将消息发送到高优先级邮箱。或者可能创建两个邮箱 - 用于通常的消息和响应?你有什么意见?

问候 Wojciech Durczyński

4

2 回答 2

2

Phillip Haller 的半透明函数可能是解决这个问题的一个很好的方法,其中 scala 编译器反射性地公开有关匹配表达式可以匹配哪些类型的对象的信息。然后,演员邮箱可以按消息类进行索引,查找速度可能会大大加快,尤其是在这种“大海捞针”的场景中。

这是TransluncentFunction 的 API,您可以看到它非常简单。看起来半透明项目已经中断了一段时间,让我们希望它尽快恢复!

于 2010-11-02T18:22:05.547 回答
0

我相信 Lift 的 Actor 内置了这种优先级:与其覆盖单个“act”方法,不如根据动作的优先级来实现许多不同的方法(不确定确切的名称)。

我不确定这是否解决了扫描速度慢的问题

于 2010-11-02T21:34:22.933 回答