天天看点

纵向扩展

利用多核最基本的机制就是并行

一、有四种类型的 Dispatcher

可以用于描述如何在 Actor

之间共享线程:

Dispatcher

:默认的 Dispatcher

类型。将会使用定义的 Executor

,在 Actor

中处

理消息。在大多数情况下,这种类型能够提供最好的性能。

 PinnedDispatcher:给每 个 Actor 都分配自己独有的线程。这种类型的 Dispatcher

为每个 Actor

都创建一个 ThreadPool Executor

,每个 Executor

中都包含一个线程。 如果希望确保每个 Actor

都能够立即响应,那么这似乎是个不错的方法。不过 PinnedDispatcher

比其他共享资源的方法效率更高的情况其实并不多。可以在单 个 Actor

必须处理很多重要工作的时候试试这种类型的 Dispatcher

,否则的话不 推荐使用。

CallingThreadDispatcher

:这个 Dispatcher

比较特殊,它没有 Executor

,而是在 发起调用的线程上执行工作。这种 Dispatcher

主要用于测试,特别是调试。由于 发起调用的线程负责完成工作,所以清楚地看到栈追踪信息,了解所执行方法的 完整上下文。这对于理解异常是非常有用的。每个 Actor

会获取一个锁,所以每 次只有一个线程可以在 Actor

中执行代码,而如果多个线程向一个 Actor

发送信 息的话,就会导致除了拥有锁的线程之外的所有线程处于等待状态。本书前面介 绍过的 TestActorRef

就是基于 CallingThreadDispatcher

实现支持在测试中同步执 行工作的。