Chormium執行緒模型及應用指南

horky發表於2016-01-09

核心概念

設計上遵循以下原則:

1 不要在UI執行緒做任何阻塞式的I/O操作,以及其它耗時的操作,通過訊息傳遞把各種操作傳給相應用途的執行緒去做。

2 不鼓勵執行緒加鎖機制和執行緒安全物件。物件只存在一個執行緒,通過訊息來實現執行緒之間的通訊,執行緒之間不互相阻塞。通過callback物件實現跨執行緒請求。

一般情況下,我們應該利用一個現有的執行緒,儘量不要建立新的執行緒。UI執行緒實際上會被設定為不允許I/O操作,並且不允許等待。 

執行緒列表

核心執行緒列表

所屬程式 執行緒名稱 型別 職責 實現
 Browser UI / BrowserThread Java Browser的主執行緒 content::BrowserThreadImpl
 Browser  Chrome_DBThread Native 負責資料庫(SQLite)相關的操作,很多功能的實現會用到該執行緒。 content::BrowserThreadImpl
 Browser  Chrome_FileThread Native 檔案的建立、刪除、讀寫等。 content::BrowserThreadImpl
 Browser  Chrome_FileUserBlockingThread Native 用於讀取與使用者互動有關的資料,需要快速的響應。看到net log模組和appcache有用。 content::BrowserThreadImpl
 Browser  Chrome_ProcessLauncherThread Native 用於啟動和終止子程式。 content::BrowserThreadImpl
 Browser  Chrome_CacheThread Native    
        content::BrowserThreadImpl
 Browser  IndexedDB Native IndexDB儲存執行緒。 base::Thread
GPU  Chrome_InProcGpuThread Native GPU的單程式版本實現。 content::InProcessGpuThread
Child Processes Chrome_ChildIOThread Native 子程式的IO執行緒實現。 base::Thread
Renderer Chrome_InProcRendererThread Native Renderer程式的單程式版本實現。 content::InProcessRendererThread

 

其它執行緒

執行緒名稱 Module 實現 說明
CookieMonsterClient CAW base::Thread  
CookieMonsterBackend CAW base::Thread  
CookieSyncManager WebView Runnable  
Chrome_libJingle_WorkerThread Browser base::Thread  
Blink Heap Marker Thread (*) Blink base::Thread  
Blink GC Sweeper (*) Blink base::Thread  
HTMLParserThread Blink base::Thread  
AsyncTransferThread gpu gpu::TransferThread  
BrowserBlocking Worker Browser base::SequencedWorkerPool 詳見:Chromium中應用C/C++併發技術要點
SimpleCache Worker net base::SequencedWorkerPool  
Network File Thread net base::Thread  

  

執行緒結構

(以單程式模型


相關文章