在我的Akka HTTP应用程序中,我必须在某些情况下多次初始化我的actor系统。就像在我的服务中一样,我需要执行器和actor系统的隐式val。所以,我在我的服务层类中初始化了一个这样的actor系统4次:
private implicit val actorSystem = ActorSystem()
我只终止了一个处于根级别的actor系统。其他人没有被终止。
这会影响我的应用程序性能吗?因为我的应用程序在运行1到2天后就会挂起。
答案 0 :(得分:8)
在您的应用程序中使用许多actor系统是一个坏主意。
基本上每个ActorSystem都附带一个默认的调度程序,它由fork-join池支持。这个池在平衡工作和可用线程方面做得非常好。也就是说,如果在同一个JVM上运行多个actor系统,最终会创建太多(虚拟)线程,从而导致进程中的性能下降。理想情况下,您需要尽可能多的线程,因为CPU核心具有最佳利用率。
请在https://manuel.bernhardt.io/2016/08/23/akka-anti-patterns-too-many-actor-systems/
后查看此文章如果这回答了你的问题,也请告诉我。