【问题标题】:Synchronized, wait and notify in Akka在 Akka 中同步、等待和通知
【发布时间】: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


【解决方案1】:

根据您的代码,您根本不需要 Rec 演员。如果您将消息从 Sen 直接发送到 frw,您将获得相同的结果。

您必须记住,Akka actor 一个接一个地按顺序处理消息。因此,即使您直接从 Sen 将它们发送到 frwSen 的所有消息也会同时到达 frw 一条消息/strong>。

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2019-12-23
    相关资源
    最近更新 更多