【发布时间】:2015-11-12 20:57:06
【问题描述】:
我想问你一件事。我有一个“Rec”演员和更多“Sen 演员”。第一个有一个必须转发的消息列表,发送者是不断向接收者发送消息的参与者。
类似这样的:
class Rec (frw: Actor) extends Actor
{
val myList = Nil;
def act =
{
case "Start" => while(true) {/*Extract the first number and send it to frw*/} //I must use a new actor if I want to keep reading messages
case i => myList+=i; //Should i use a "synchronize" here (i'm extracting elements with the other actor after all)?
}
}
class Sen (rcv: Actor) extends Actor
{
var i=100;
def act =
{
case "Start" => while(i>0) {i+=1; rcv ! i;}
}
}
我的问题是 Rec 一次只能转发一条消息,因此它必须将所有消息保存在一个列表中。有没有办法提高 Rec 演员?我不喜欢 while(true),但是每当我收到一条消息时,我都无法提取第一个数字(消息可能在列表中停留的时间过长)。我应该使用同步/等待/通知还是 Akka 有更好的方法? 谢谢你,对不起我的英语不好。
【问题讨论】:
-
你应该在这里发布你的代码示例
-
目前您链接的代码示例没有任何意义。当您说“提取第一个数字”时,不清楚您要完成什么。
-
我要取出列表的第一个元素,将其从列表中移除并发送给frw。
-
一次发送一条消息的要求来自哪里,它的真正含义是什么?是不是说只有在 Rec 收到 frw 的确认后,才需要从列表中删除一条消息?
标签: concurrency akka actor synchronized