当前位置: 首页 > 知识库问答 >
问题:

如何在akka和Scala中实现多线程?

陶星波
2023-03-14
def receive = {
    case Rumor => {     
        count+=1; 
            if ...
            else self ! Sleep(FiniteDuration(20, "millis"))
    }
    case Sleep(duration) => {
        case object WakeUp
        context.system.scheduler.scheduleOnce(duration, self, WakeUp)
        context.become(
        {
            case WakeUp => context.unbecome()
                           others ! Rumor
        }, discardOld = false   
        )
    }       
    case _=> .....
 }
import scala.math._
import akka.actor._
import scala.util.Random
import scala.concurrent.duration._
error: Cannot find an implicit ExecutionContext, either require one yourself or import ExecutionContext.Implicits.global
        context.system.scheduler.scheduleOnce(duration, self, WakeUp)

共有1个答案

经慈
2023-03-14

你整件事都做错了。Actors是专门为去除手动线程管理引起的大多数问题而设计的。其中一个特点是,参与者总是按顺序工作。不能强制执行元一次处理多个消息。Akka甚至提供了关于消息及其顺序的几个保证。这允许完全的线程安全,如果您不做任何愚蠢的事情,比如使用可变消息或直接调用其他actor对象。

当然,您可以在单独的线程中运行不同的参与者(使用正确的dispatcher),它们将真正并行地处理它们的消息。但您不能从多个线程运行单个执行元,无论您做什么。

您真的应该阅读优秀的Akka文档,特别是关于一般概念的部分。如果你读懂了,你就不会有这样的问题了。

 类似资料:
  • 我写了一个Akka基本演员,可以处理一些常见的消息。我想通过扩展基执行元(而不是通过基执行元的组合),在子执行元中重用这个基本行为。 我在前面的问题中看到过几种做法。它们都是有效的,但也可以改进: null 下面是两种可供选择的方法,我可以创建子执行元的实例,它结合了常见行为和附加行为: 最后,我可以通过以下方式调用子参与者: 我的实现存在的问题: 就像我之前说过的,我更喜欢在定义子执行元时混合基

  • class下导致new HelloWorld行出现错误: 所以我尝试:,但这会导致编译器错误: 下面的HelloWorld应该如何实现? 阅读其他Scala文档时,要求在扩展Actor的类中定义act方法,然后在该类上调用start方法,是否有理由使用actorOf而不是定义act方法? 以下内容摘自Scala akka docs http://doc.akka.io/docs/akka/2.2.

  • 下面的行不编译,因为编译没有找到“hashmap$hashtriemap” 40) 最后,我的示例如下所示: 注我没有使用Kryo特定的Akka特性,我使用它作为一个通用的序列化框架。火花也一样。没有直接插入火花或akka配置。

  • 我刚才比较了scala Actor和java线程的性能。 我很惊讶地看到了这种差异,我观察到我的系统最多只能生成2000个线程(一次活动),但在同一个系统中,我只能生成500,000个Scala参与者。

  • 本文向大家介绍如何在JavaScript中实现多态?,包括了如何在JavaScript中实现多态?的使用技巧和注意事项,需要的朋友参考一下 多态性 多态 是面向对象编程(OOP)的宗旨之一。它有助于设计对象,使其可以与特定提供的对象共享或覆盖任何行为。多态性 利用继承的 优势来实现这一点。 在以下示例中,子对象(例如“板球”和“网球”)已覆盖从父对象“游戏”调用的“选择”方法,并分别返回了新字符串

  • R2DBC目前不支持复合键。我想知道我们现在如何实现多对多关系? 例如,给定两个实体: 以及它们的模式: 我可以为多对多映射创建一个表: 但是,我们应该如何在kotlin/java中定义映射类ItemTag? 或者省略可以吗?那么类就不能有任何?我想那很好。这是唯一的含义吗?