Akka Message Dispatcher是维持Akka Actor“运作”的部分,可以说它是整个Akka框架的引擎。所有的Message Dispatcher同时实现一个Execution Context,这意味着它们可以用来执行任何代码。
在Akka中,Dispatcher基于Java Executor框架来实现,提供了异步执行任务的能力。
Executor是基于生产者—消费者模型来构建的,这就意味着任务的提交和任务的执行是在不同的线程中隔离执行的,即提交任务的线程与执行任务的线程是不同的。Executor框架的两个重要实现是:
●ThreadPoolExecutor:该实现从预定义的线程池中选取线程来执行任务。
●ForkJoinPool:使用相同的线程池模型,提供了工作窃取的支持。
在Akka中,Dispatcher控制和协调消息并将其分发给运行在底层线程上的Actor,由它来负责调度资源的优化,并保证任务以最快的速度执行。Akka提供了多种Dispatcher类型,用户可以根据自己的硬件资源及应用类型选择合适的Dispatcher类型。
Dispatcher运行在线程之上,负责分发其邮箱里面的Actors和Messages到executor中的线程上运行。在Akka中,提供了4种类型的Dispatcher:
●Dispatcher。
●Pinned Dispatcher。(www.daowen.com)
●Balancing Dispatcher。
●Calling Thread Dispatcher。
对应的,也有默认的4种邮箱的实现:
●Unbounded mailbox。
●Bounded mailbox。
●Unbounded priority mailbox。
●Bounded priority mailbox。
Akka提供了这么多默认的实现,在程序中要如何使用呢?以及如何为Actor指定派发器呢?
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。