利用多核最基本的機制就是并行
一、有四種類型的 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
實作支援在測試中同步執 行工作的。