【发布时间】:2011-03-10 14:18:14
【问题描述】:
我目前正在与 scala 中的两个演员合作。一,生产者,产生一些数据并将其发送到parcer。生产者通过消息发送HashMap[String,HashMap[Object,List[Int]]](连同this标记发送者):
parcer ! (this,data)
解析器一直在等待这样的消息:
def act(){
loop{
react{
case (producer, data)=> parse(data);
}
}
}
程序在正常情况下完美运行。问题来自大量数据和发送的许多消息(哈希大约有 10^4 个元素,内部哈希大约有 100 个元素,列表长度为 100),程序崩溃。它没有显示错误或异常。它只是停止。
问题似乎是我的生产者的工作速度比解析器快得多(目前我不想要多个解析器)。
阅读scala mailbox size limit 后,我想知道我的解析器邮箱是否已达到极限。该帖子还提供了一些解决方案,但我首先需要确保这是问题所在。我该如何测试?
有没有办法知道演员的内存限制?那么读取邮箱中已用/空闲内存呢?
也欢迎您对尚未在that link 中发布的工作流程提出任何建议。
谢谢,
【问题讨论】:
-
如果您想了解不同的实现,您应该看看 Akka[1],它同时具有负载平衡 [2] 和工作窃取 [3] [1]:www.akkasource。组织 [2]:klangism.tumblr.com/post/582112173/akka-message-routing-part-2 [3]:doc.akkasource.org/dispatchers
标签: memory scala memory-management actor