1. 程式人生 > >Google Chrome原始碼剖析【序】

Google Chrome原始碼剖析【序】

【序】

開源是口好東西,它讓這個充斥著大量工業垃圾程式碼和教材玩具程式碼的行業,多了一些藝術氣息和美的潛質。它使得每個人,無論你來自米國紐約還是中國鐵嶺,都有機會站在巨人的肩膀上,如果不能,至少也可以抱一把大腿。。。

現在我就是來抱大腿的,這條粗腿隸屬於 Chrome(開源專案名稱其實是Chromium,本來Chrome這個名字就夠晦澀了,沒想到它的本名還更上一層樓…),Google那充滿狼子野心的瀏覽器。每一個含著金勺子出生的人都免不了被仰慕並被唾罵,Chrome也不例外。關於Chrome的優劣好壞討論的太多了,基本已經被嚼成甘蔗渣 了,沒有人願意再多張一口了。俗話說,內行看門道外行看熱鬧,大部分所謂的外行,是通過使用的真實感受來評定優劣的,這無疑是最好的方式。但偏偏還是有自詡的內行,喜歡說內行話辦外行事,一看到Chrome用到多程序就說垃圾廢物肯定低能。拜託,大家都是搞技術的,你知道多程序的缺點,

Google也知道,他們不是政客,除了搞個噱頭扯個蛋就一無所知了,人家也是有臉有皮的,寫一坨屎一樣的開原始碼放出來遭世人恥笑難道會很開心?所謂技術的優劣,是不能 一概而論的,同樣的技術在不同場合不同環境不同程式碼實現下,效果是有所不同的。既然Chrome用了很多看上去不是很美的技術,我們是不是也需要了解一下 它為什麼要用,怎麼用的,然後再開口說話?(恕不邀請,請自行對號入座…)。。。


人說是騾子是馬拉出來遛遛,Google已經把 Chrome這匹驢子拉到了世人面前,大家可以隨意的遛。我們一直自詡是搞科學的,就是在努力和所謂的藝術家拉開,人搞超女評委的,可以隨意塞著屁眼用嘴放屁,楞把李天王說是李天后,你也只能說他是藝術品位獨特。你要搞科學就不行,說的不對,輕的叫無知,重的叫學術欺詐,結果一片慘淡。所以,既然程式碼都有 了,再說話,就只能當點心注點意了,先看,再說。。。

我已經開始遛Chrome這頭驢了,確切一點, 是頭壯碩的肥驢,專案總大小接近2G。這樣的龐然大物要從頭到腳每個毛孔的大量一遍,那估計不嚥氣也要吐血的,咱又不是做Code review,不需要如此拼命。每一個好的開源專案,都像是一個美女,這世界沒有十全十美的美女,自然也不會有樣樣傑出的開源專案。每個美女都有那麼一兩點讓你最心動不已或者倍感神祕的,你會把大部分的注意力都放在上面細細品味,看開源,也是一樣。Chrome對我來說,有吸引力的地方在於(排名分先 後…):

1. 它是如何利用多程序(其實也會有多執行緒一起)做併發的,又是如何解決多程序間的一些問題的,比如程序間通訊,程序的開銷;
2. 做為一個後來者,它的擴充套件能力如何,如何去權衡對原有外掛的相容,提供怎麼樣的一個外掛模型;
3. 它的整體框架是怎樣,有沒有很NB的架構思想;
4. 它如何實現跨平臺的UI控制元件系統;
5. 傳說中的V8,為啥那麼快。

但Chrome是一個跨平臺的瀏覽器,其Linux和Mac版本正在開發過程中,所以我把所有的眼光都放在了windows版本中,所有的程式碼剖析都是基於windows版本的。話說,我本是瀏覽器新手、win api白痴以及併發處理的火星人,為了我的好奇投身到這個溜驢的行業中來,難免有學的不到位看的走眼的時候,各位看官手下超生,有錯誤請指正,實在看不下去,回家自己牽著遛吧。。。
扯淡實在是個體力活,所以後面我會少扯淡多說問題。。。

關於Chrome的原始碼下載和環境配置,大家看這裡(windows版本),只想強調一點,一定要嚴格按照說明來配置環境,特別是vs2005的補丁和windows SDK的安裝,否則肯定是編譯不過的。。。

最後,寫這部分唯一不是廢話的內容,請記住以下這幅圖,這是Chrome最精華的一個縮影,如果你還有空,一定要去這裡進行閱讀,其中重中之重是這一篇。。。

圖1 Chrome的執行緒和程序模型

作者:duguguiyu

轉自:http://www.ha97.com/2903.html

相關推薦

Google Chrome原始碼剖析

【序】 開源是口好東西,它讓這個充斥著大量工業垃圾程式碼和教材玩具程式碼的行業,多了一些藝術氣息和美的潛質。它使得每個人,無論你來自米國紐約還是中國鐵嶺,都有機會站在巨人的肩膀上,如果不能,至少也可以抱一把大腿。。。 現在我就是來抱大腿的,這條粗腿隸屬於 Chrome(

Google Chrome原始碼剖析:程序模型

【三】 Chrome的程序模型 1. 基本的程序結構 Chrome是一個多程序的架構,不過所有的程序都會由老大,Browser程序來管理,走的是集中化管理的路子。在Browser程序中,有xxxProcessHost,每一個host,都對應著一個Process,比如Re

Chrome原始碼剖析Chrome的程序間通訊

【二】Chrome的程序間通訊 1. Chrome程序通訊的基本模式 程序間通訊,叫做IPC(Inter-Process Communication),在Chrome不多的文件中,有一篇就是介紹這個的,在這裡。Chrome最主要有三類程序,一類是Browser主程序,我們一

Chrome原始碼剖析

 【二】Chrome的程序間通訊 1. Chrome程序通訊的基本模式 程序間通訊,叫做IPC(Inter-Process Communication),在Chrome不多的文件中,有一篇就是介紹這個的,在這裡。Chrome最主要有三類程序,一類是Browser主程序,我們

Chrome原始碼剖析

開源是口好東西,它讓這個充斥著大量工業垃圾程式碼和教材玩具程式碼的行業,多了一些藝術氣息和美的潛質。它使得每個人,無論你來自米國紐約還是中國鐵嶺,都有機會站在巨人的肩膀上,如果不能,至少也可以抱一把大腿。。。現在我就是來抱大腿的,這條粗腿隸屬於Chrome(開源專案名稱其實是Chromium,本來Chrome

Chrome原始碼剖析 Chrome的多執行緒模型

【一】 Chrome的多執行緒模型 0. Chrome的併發模型 如果你仔細看了前面的圖,對Chrome的執行緒和程序框架應該有了個基本的瞭解。Chrome有一個主程序,稱為Browser程序,它是老大,管理Chrome大部分的日常事務;其次,會有很多Rendere

Chrome原始碼剖析Chrome的程序模型

1. 基本的程序結構 Chrome是一個多程序的架構,不過所有的程序都會由老大,Browser程序來管理,走的是集中化管理的路子。在Browser程序中,有xxxProcessHost,每一個host,都對應著一個Process,比如RenderProcessHost對

read 系統調用剖析

column 解析 sync 表示 per page 初始化過程 使用 eric 轉自:https://www.ibm.com/developerworks/cn/linux/l-cn-read/ 大部分程序員可能會有這樣的疑問:當在程序中調用庫函數 read 時

Linux MTD系統剖析

過程 當下 default targe lin 讀取內容 state yaffs2 lock 轉自:http://blog.csdn.net/lwj103862095/article/details/21545791 MTD,Memory Technology Dev

django快速開發

django 感想 linux 我目前處於雲計算運維崗。在每天需要進行諸多繁瑣的巡檢,為此組內早在14年開始就打造了一個自動化運維平臺,日常中絕大多數任務都得以簡化。我入職公司差不多有半年左右了,也被派發到組內系統建設這個項目。由於本人之前涉獵偏重於系統技術,開發方面底蘊較薄,深感

一張圖總結Google C++程式設計規範(Google C++ Style Guide)

(轉自:https://blog.csdn.net/voidccc/article/details/37599203?utm_source=blogxgwz0) Google C++ Style Guide是一份不錯的C++編碼指南,我製作了一張比較全面的說明圖,可以在短時間內快速掌握規範的重點

caffe 原始碼分析:Euclidean loss layer

以下是Euclidean loss layer的程式碼分析,轉自: https://blog.csdn.net/seashell_9/article/details/68064294 一. 前向函式 template <typename Dtype> void Euclide

caffe 原始碼分析:Layer基類

建構函式 //標頭檔案 include/caffe/layer.hpp //實現檔案 src/caffe/layer.cpp // src/caffe/layer.cu /* * 建構函式 * 子類中修改建構函式,自定義設定在SetUp()中設定

caffe 原始碼分析: Blob類

Blob類的:     //標頭檔案: include\caffe\blob.hpp //cpp檔案: src\caffe\blob.cpp //cu檔案: src/caffe/blob.cu //定義某layer的輸入blobs const ve

Flutter | Json自動反序列化——json_serializable(附原始碼3

轉載自:https://www.jianshu.com/p/b307a377c5e8   前言 Google推出flutter這樣一個新的高效能跨平臺(Android,ios)快速開發框架之後,被業界許多開發者所關注。我在接觸了flutter之後發現這個確實是一個好東西,好東西

Android Studio使用Google Flutter完整教程 0

轉載自:https://blog.csdn.net/gfg156196/article/details/81118368   一套程式碼 iOS、Android 兩端執行,Google Flutter 實在太強大。。 “Flutter 可幫助你更容易、更快速的開發介面美觀的移動

RabbitMQ RabbitMQ配置開機啟動 Erlang原始碼安裝 RabbitMQ RabbitMQ安裝

環境   系統:Linux(CentOS 7.2)   Erlang環境:21.1(安裝參考【Erlang】原始碼安裝)   RabbitMQ:3.7.9(安裝參考【RabbitMQ】 RabbitMQ安裝) 配置開機啟動   1、增加自啟動指令碼:     在/etc/init.d目錄下新建一個

Spring原始碼學習SpringMVC之DispatcherServlet

目錄 一、前言 三、總結 一、前言 Web環境是Spring框架的重要應用場景,而SpringMVC又是Web開發中一個常用的框架,因此我們有必要學習一下SpringMVC的實現原理。 回到Web專案的配置檔案web.xml中,在使用SpringMV

JDK1.7原始碼分析集合HashMap的死迴圈

前言 在JDK1.7&1.8原始碼對比分析【集合】HashMap中我們遺留了一個問題:為什麼HashMap在呼叫resize() 方法時會出現死迴圈?這篇文章就通過JDK1.7的原始碼來分析並解釋這個問題。 如下,併發場景下使用HashMap造成Race Condition

imx6ul linux4.1.15 LED驅動配置及heartbeat原始碼分析

本文轉載自:https://blog.csdn.net/u010444107/article/details/78328807 1)檢視核心配置[email protected]:~/freescale/linux-imx$ cat arch/arm/configs/imx_v7_defconfi