给出执行上下文和线程池,如何在其上调度/实现akka / scala actor?
我很长时间以来一直对此主题感到困惑。我假设线程和参与者之间存在某种关系。每个演员都有一个主持它的线程,所以我在想。在协作多任务模式下工作的每个线程可能都有几个参与者。
文档着重于用法,并简要介绍了内部体系结构。您只需要扩展Actor
类,您就可以成为演员。所以我试图猜测如何做到这一点。并想象每个Actor
都有生命周期。诸如异步等待消息队列之类的东西。然后处理消息。开始。
这完全是错误的假设。尽管文档中说“演员生命周期”,但这并不意味着Actor
生命周期。提到的Actor是一个概念,而不是实现Actor
类的实际对象。该对象位于Java堆中是被动的。
为了使生活充满灵感,需要涉及一群真正的工人的协调工作。它的核心是dispatcher。它包含所有参与者,线程和消息。当资源可用并且有消息可用于处理时,dispatcher会激活。它使用适当的Actor
对象,将其receive方法包装在runnable中,并将其传递给备用线程。因此,仅从actor系统偶尔调用方法就没有对象的生命周期。
[当您想到它时,它比我早先设想的方案更有意义。但是我很难从可用的文档中推断出它。它是由经验丰富的并发程序员编写的。区分actor类和它后面的actor概念的区别。他们知道actor系统的dispatcher就像OS的任务调度程序。因此,他们很快地找到了要点,并描述了各种口味,并且实现了大家都熟悉的概念。
但是对于新手来说,这并不容易。他不了解演员系统环境中的dispatcher pattern。我试图用Google搜索“调度程序模式”,它显示出仅与参与者系统定义无关。
我很容易找到double dispatch,多调度和其他OOP主题。我发现了与akka的路由器message dispatcher类似的东西。演员消息分发程序可能有不错的描述,但很难找到。
我希望我消除了误会。
关于'我正在研究一个更像是说给您10个线程的线程池,并从中分离出50个actor,一批10个线程如何处理这么多actor?'
确切的行为取决于调度程序和配置。但是,大多数调度程序基本上都是这样的:
您可以在akka documentation中找到相关信息,就目前情况而言,它是相当完整的。
基本上,您可以选择/定义调度程序,并通过配置(通过文件或代码)将角色分配给它们。
然后每个调度程序的实现都基于某种执行程序。
我在寻找演员如何获得线程之后去了[https://medium.com/@arcagarwal/introduction-to-akka-actors-5ec3ff032f4b],希望这会有所帮助!