下面将对4种Dispatcher分别介绍。
1.Dispatcher
Dispatcher是Akka中默认的派发器,这是一种基于事件的分发器,该派发器绑定一组Actor到线程池中,下面是Dispatcher的一些特性。
●每一个Actor都有自己的邮箱。
●该Dispatcher可以被任意数量的Actor共享。
●该Dispatcher可以由ThreadPoolExecutor或ForkJoinPool提供支持。
●该Dispatcher是非阻塞的。
默认Dispatcher的工作原理如图11-1所示。
图11-1 Dispatcher工作原理图
2.Pinned Dispatcher
这种类型的Dispatcher为每一个Actor提供一个单一的、专用的线程。这种做法在I/O操作或者长时间运行的计算中是非常有用的,下面是Pinned Dispatcher的特点。
●每一个Actor都有自己的邮箱。
●每一个Actor都有专用的线程,该线程不能和其他Actor共享。
●这种Dispatcher有一个Executor线程池。
●这种Dispatcher在阻塞操作上进行了优化。例如,如果程序正在进行I/O操作,那么
这个Actor将会等到任务执行完成。这种阻塞型的操作在性能上要比默认的Dispatcher好。(www.daowen.com)
Pinned Dispatcher工作原理如图11-2所示。
3.Balancing Dispatcher
这是一种基于事件的Dispatcher,它会将任务比较多的Actor的任务重新分发到比较闲的Actor上运行。下面是Balancing Dispatcher的特点。
图11-2 Pinned Dispatcher工作原理
●所有Actor共用一个邮箱。
●该Dispatcher只能被同一种类型的Actor共享。
●该Dispatcher可以由ThreadPoolExecutor或ForkJoinPool提供支持。
Balancing Dispatcher原理如图11-3所示。
图11-3 Balancing Dispatcher工作原理图
4.Calling Thread Dispatcher
这种类型的Dispatcher主要用于测试,并且在当前线程中运行任务,不会创建新的线程。主要有以下特点:
●每一个Actor都有自己的邮箱。
●该Dispatcher可以被任意数量的Actor共享。
●该Dispatcher由调用线程支持。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。