gpt4 book ai didi

multithreading - 如何在akka和scala中实现多线程?

转载 作者:行者123 更新时间:2023-12-03 01:46:50 26 4
gpt4 key购买 nike

现在我想要一个 Actor 向其他 Actor 发送消息,同时接收其他 Actor 的消息。看来我需要在 Akka 中使用多线程。下面是我的代码:

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 _=> .....
}

我的问题是:

1) 我不确定我的代码是否能按我的预期工作。引用 use Akka scheduler inside an actor

2)我已经导入

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)

最佳答案

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

当然,您可以在单独的线程中运行不同的参与者(使用正确的调度程序),并且它们确实会并行处理它们的消息。但是无论你做什么,你都不能从多个线程运行单个 actor。

你真的应该阅读优秀的Akka documentation ,特别是关于 general concepts 的部分。如果您阅读并理解了它,就不会有这样的问题。

关于multithreading - 如何在akka和scala中实现多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19171279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com