Java 如何同时创造100万名演员?

Java 如何同时创造100万名演员?,java,scala,akka,Java,Scala,Akka,这只是一个学习的例子 我有一个演员,他有一百万个ID (这只是一个简单的例子。在现实生活中,这些演员可以代表银行账户,我会向他们发送“告诉”或“广播”消息。所以我想将它们同时保存在内存中) 我希望这个演员创建100万个子演员(每个id一个) 还有比这段代码更并行的方法吗 receive (Msg,..) { ids.stream().forEach( id -> { context().actorOf(MyActor.pro

这只是一个学习的例子

我有一个演员,他有一百万个ID (这只是一个简单的例子。在现实生活中,这些演员可以代表银行账户,我会向他们发送“告诉”或“广播”消息。所以我想将它们同时保存在内存中)

我希望这个演员创建100万个子演员(每个id一个)

还有比这段代码更并行的方法吗

receive (Msg,..) {

 ids.stream().forEach(
           id -> {
                    context().actorOf(MyActor.props(id));
                }
    );
}

您可以将集合转换为并行集合,以使遍历它并发:

<代码> Scala >(0到20)。 10211345071289151618192061171314
为什么不为孩子们使用
广播路由器呢

val children = system.actorOf(Props[ChildrenActor].withRouter(
      BroadcastRouter(nrOfInstances = amountOfChildren)))

在这种情况下,您每次只需要向所有孩子发送消息。如果您需要向孩子们发送广播消息和个人消息,您可以使用
一致哈希路由器
将消息映射到孩子们的ID。

这不会创建100万个参与者,让akka做它的工作,并定义完成这项工作需要多少演员。对不起,你肯定是对的,但我对akka太陌生了,所以我不知道怎么做?你没有指定akka需要多少演员,这是akka的工作。您可以告诉akka它将使用多少个actor引用。@LuiggiMendoza调用
actorOf
确实创建了一个actor的新实例(同时返回
ActorRef
与该实例通信)。因此,如果您循环一百万次并调用
actorOf
一百万次,那么您的系统中将有一百万个该类型的参与者实例。我不知道你为什么要说相反的话。@cmbaxter是对的,Luiggi的评论有点误导。是你定义了参与者系统的结构,即参与者的数量和他们的监督层次结构,而akka负责这些参与者如何使用线程,只是为了确保。代码正在(可能)启动参与者中的线程。这样行吗?那么,创建参与者是线程安全的操作吗?@jack参与者与线程不同。许多参与者可以在同一个线程上工作,一个参与者也可以有多个线程参与。阿克卡负责这件事。我强烈建议您阅读并回顾akka的基本概念,它不是线程池框架。