Executor(執行器)

定義

Executor(執行器)是驅動節點內部所有 callback(訂閱、服務、動作、timer)實際被呼叫執行的排程器,節點本身只是註冊了「有事件發生時該執行哪個函式」,真正讓這些函式被觸發的是 Executor。

關鍵特性

  • SingleThreadedExecutor:所有 callback 依序在同一個執行緒裡執行,簡單、沒有執行緒安全疑慮,但如果某個 callback 內部同步等待另一個 callback 的結果(例如在訂閱 callback 裡同步呼叫服務),會造成死鎖。
  • MultiThreadedExecutor:多個 callback 可以並行執行,能避免上述死鎖,但需要搭配正確的 Callback Group 設定,且要留意共享狀態的執行緒安全問題。
  • Callback GroupMutuallyExclusiveCallbackGroup 讓群組內的 callback 互斥執行(同一時間只有一個),ReentrantCallbackGroup 允許同一個群組內多個 callback 同時執行,Action Server 要能正確回應取消請求,通常需要後者。

使用情境

  • 一般簡單節點用預設的 SingleThreadedExecutor 通常已經足夠。
  • 節點內部需要在 callback 裡呼叫其他服務/動作、又不想卡死時,要考慮改用 MultiThreadedExecutor 搭配 ReentrantCallbackGroup

延伸閱讀