【架構分析】Fuchsia Loop消息處理詳解

目錄

消息循環Message Loop

Message Loop工作原理


消息循環Message Loop

Fuchsia應用程序通過libasync-loop創建和使用消息循環Message Loop, 應用程序必須擁有Message Loop才能正常工作,比如跨進程IPC調用. 爲了描述更具體, 本文以下面這個main函數說明Message Loop的運行原理.

int main(int argc, const char** argv) {
  async::Loop loop(&kAsyncLoopConfigAttachToThread);

  ......

  loop.Run();
  return 0;
}
Message Loop主要類圖

Message Loop主要分2個庫

  • libasync-loop (fuchsia/zircon/system/ulib/async-loop) 包裝和實現了消息循環Loop類
  • libasync (fuchsia/zircon/system/ulib/async) 包裝和實現了異步等待Wait類

Message Loop工作原理

Message Loop工作時序圖

Message Loop的工作過程包括4個主要步驟,詳細的時序分析參考上圖

  • Loop類初始化過程即main函數的 
async::Loop loop(&kAsyncLoopConfigAttachToThread);
  • 主線程消息循環過程即main函數的
loop.Run();
  • 應用程序通過某些包裝類創建Wait實例註冊了需要等待的對象以及回調通知函數(典型的情況如FIDL IPC中等待channel對象)
  • 應用程序通過某些包裝類調用了Wait的Begin開始異步等待對象上出現期望的SIGNAL並觸發回調通知
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章