Akka 当什么都没发生时,阿克卡在做什么?

Akka 当什么都没发生时,阿克卡在做什么?,akka,Akka,我有一个非常简单的应用程序(2个参与者),它通过套接字发送文件。应用程序使用SpringBoot和Akka,传输完成后,不会发生其他任何事情。然而,我注意到CPU使用率很高,即使在传输之后也是如此(比如4核机器上的CPU使用率为50%,所以是2核)。我已经捕获了活动线程的快照,其中大约1/3属于Akka Akka在做什么,为什么需要这么多cpu 一般地回答您的问题:Akka创建了一个线程池,用于执行异步消息处理。因此,如果您编写如下代码,您的应用程序将永远不会终止,因为Akka将继续运行 cla

我有一个非常简单的应用程序(2个参与者),它通过套接字发送文件。应用程序使用SpringBoot和Akka,传输完成后,不会发生其他任何事情。然而,我注意到CPU使用率很高,即使在传输之后也是如此(比如4核机器上的CPU使用率为50%,所以是2核)。我已经捕获了活动线程的快照,其中大约1/3属于Akka

Akka在做什么,为什么需要这么多cpu


一般地回答您的问题:Akka创建了一个线程池,用于执行异步消息处理。因此,如果您编写如下代码,您的应用程序将永远不会终止,因为Akka将继续运行

class Root extends Actor {

  // create some child actors to do some work

  override def receive: Receive = Actor.emptyBehavior
}

object Main {

  def main(args: Array[String]): Unit = {
    val system = ActorSystem("main")
    system.actorOf(Props(new Root))
  }
}
因此,通常如果您需要终止应用程序,您会定义一条消息,表示所有工作都已完成,并将此消息发送给根参与者。然后,根参与者可以调用
context.system.terminate()
来终止系统


回到你的问题上来,我不明白你为什么要把Akka和Spring Boot结合起来。你的线程转储,我不确定这个问题是否与Akka有关。看起来线程挂在HttpClient内部。您确定已释放并关闭所有打开的连接吗?

我对创建多个线程没有问题,我只是不明白,为什么这些线程仍然处于活动状态(而不是等待消息)。应用程序是服务器,所以它不是故意终止的。我看不出有什么原因,为什么Akka+Spring会是个坏主意,它们做不同的事情。只有一个通过套接字的连接成功完成。讨论Akka+Spring引导可能超出了这个问题的范围。对不起。如果没有一些代码示例,很难找出发生了什么。你能为你的问题添加一个吗?请发布你的代码尽管所有这些线程都在等待,所以它们占用了你50%的CPU,但这很可能是一个错误的结论。