我已經開始使用 Akka。請澄清以下問題;
我看到創建了大約 8 個默認調度程式執行緒。該數字在哪里定義?
我看到在我的設定中創建了兩種型別的調度程式,即 default-dispatcher 和 internal-dispatcher。這是如何決定的?
我們可以在任何 IDE 的 Debug 模式下看到調度程式執行緒。有什么方法可以可視化 Akka 物件,例如 Actors、Routes、Receptionist 等?
我觀察到,當我讓程式運行一段時間后,調度程式執行緒會自動死亡。請說明原因。演員系統會自動創建和自動洗掉調度員嗎?
我在日志中看到 default-dispatcher 后面的數字。這個數字說明了什么?它是否指示調度程式為演員分配的執行緒號?示例:2022-09-02 10:39:25.482 [MyApp-akka.actor.default-dispatcher-5] 除錯

uj5u.com熱心網友回復:
Akka 的默認調度程式配置可以在包的reference.conf檔案中找到akka-actor。默認情況下,默認調度程式(如果沒有另外配置,用戶 Actor 在其上運行)是一個 fork-join 池,具有最少 8 個執行緒和最多 64 個執行緒。內部調度程式(在 Akka 2.6 中引入以防止用戶參與者餓死系統參與者)也是 IIRC,一個 fork-join 池。其他調度程式型別和配置是可能的:reference.conf通過它們的注釋,盡管對于大多數目的,默認值是合理的。
據我所知,在 Akka 應用程式中沒有用于可視化演員等的現有工具。
執行緒由調度程式底層的執行緒池管理。fork-join 池會終止已經空閑一定時間的執行緒,并根據需要創建新執行緒。
執行緒(默認情況下......至少自定義調度程式可以覆寫它)命名為dispatcher-name-threadNumber. 如果您在參與者內部登錄并讓您的日志訊息格式包含執行緒名稱,您可以看到參與者被安排到哪個執行緒。請注意,通常情況下,一個actor被調度到一個執行緒上并不意味著它永遠不會被調度到另一個執行緒上(特別是執行緒本地存盤之類的東西不太可能作業);還值得注意的是,由于 Akka 調度程式也是 ScalaExecutionContext和 Java Executor,執行緒可以被非參與者(例如FutureScala 中的回呼)消耗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/504787.html
上一篇:比較EGit中的分支?
