利用多核最基本的机制就是并行
一、有四种类型的 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
实现支持在测试中同步执 行工作的。