Google Chrome 「Multi-process」 架構(上)

researcher

This site has been moved to dreamerslab.com

本站已經移至 dreamerslab.com

本文修改自Chrome 多進程架構,該文譯自Multi-process Architecture。Multi-process 中文翻譯成多程序、多行程、多處理緒、多進程等詞彙。幾個名詞轉換,不一一列舉:對象(objet)→物件;進程(process)→(處理)程序;標籤(process)→分頁;窗口(window)→視窗。
問題:
如何使瀏覽器不會因為某個糟糕的網頁,導致其全盤崩潰?

架構總覽:
「Google瀏覽器」使其每個分頁(Tab)自成一個獨立的程序(process),從而防止整個應用程式因為排版引擎的bug而崩潰。同樣我們會嚴格限制程序訪問作業系統及其記憶體。

我們將運行UI(使用者介面)和管理分頁的插件程序,稱之為”瀏覽器程序或者說是”瀏覽器”。同樣,我們將每個分頁相關的程序,稱之為”排版程序”或者說是”排版”。我們使用開源的 WebKit 作為HTML的解析和排版引擎

排版引擎

(圖片來源:http://dev.chromium.org

管理排版(Render)程序每個排版程序都有一個全局的 RenderProcess 的物件,用以管理和父瀏覽器程序之間的通訊,並且保持全局狀態。瀏覽器每一個排版程序,保持一個對應的 RenderProcessHost 物件,用以管理瀏覽器狀態,並負責與其他排版程序進行通訊。瀏覽器程序和排版程序通過Chromium的IPC系統進行通訊。

管理視圖(Views)

每 個排版程序,包含一個或多個 RenderView 物件。RenderProcess物件負責管理RenderView 物件以及分頁(Tabs)的內容。RenderProcessHost裡面包含有RenderViewHost。同時每個RenderViewHost對 應著排版程序的一個 視圖。在一個排版程序裡面的 視圖都有一個不同的視圖ID。這些視圖ID有可能和其他排版程序裡面的視圖ID重名。因此我們確定一個位於的視圖需要同時借助 RenderProcessHost和視圖ID。瀏覽器通過RenderViewHost 物件與指定分頁的內容進行通訊。 RenderViewHost 通過RenderProcessHost 傳遞消息給RenderView上的RenderProcess 物件。

參考來源

Chrome 多進程架構

Related Posts


Comments are closed.