開源是口好東西,它讓這個充斥着大量工業垃圾代碼和教材玩具代碼的行業,多了一些藝術氣息和美的潛質。它使得每一個人,不管你來自米國紐約仍是中國鐵嶺,都有機會站在巨人的肩膀上,若是不能,至少也能夠抱一把大腿。。。html
如今我就是來抱大腿的,這條粗腿隸屬於 Chrome(開源項目名稱實際上是Chromium,原本Chrome這個名字就夠晦澀了,沒想到它的本名還更上一層樓…),Google那充滿狼子野心的瀏覽器。每個含着金勺子出生的人都免不了被仰慕並被唾罵,Chrome也不例外。關於Chrome的優劣好壞討論的太多了,基本已經被嚼成甘蔗渣 了,沒有人願意再多張一口了。俗話說,內行看門道外行看熱鬧,大部分所謂的外行,是經過使用的真實感覺來評定優劣的,這無疑是最好的方式。但恰恰仍是有自誇的內行,喜歡說內行話辦外行事,一看到Chrome用到多進程就說垃圾廢物確定低能。拜託,你們都是搞技術的,你知道多進程的缺點,Google也知道,他們不是政客,除了搞個噱頭扯個蛋就一無所知了,人家也是有臉有皮的,寫一坨屎同樣的開源代碼放出來遭世人恥笑難道會很開心?所謂技術的優劣,是不能 一律而論的,一樣的技術在不一樣場合不一樣環境不一樣代碼實現下,效果是有所不一樣的。既然Chrome用了不少看上去不是很美的技術,咱們是否是也須要了解一下 它爲何要用,怎麼用的,而後再開口說話?(恕不邀請,請自行對號入座…)。。。linux
人說是騾子是馬拉出來遛遛,Google已經把 Chrome這匹驢子拉到了世人面前,你們能夠隨意的遛。咱們一直自誇是搞科學的,就是在努力和所謂的藝術家拉開,人搞超女評委的,能夠隨意塞着屁眼用嘴放屁,楞把李天王說是李天后,你也只能說他是藝術品位獨特。你要搞科學就不行,說的不對,輕的叫無知,重的叫學術欺詐,結果一片慘淡。因此,既然代碼都有 了,再說話,就只能當點心注點意了,先看,再說。。。windows
我已經開始遛Chrome這頭驢了,確切一點, 是頭壯碩的肥驢,項目總大小接近2G。這樣的龐然大物要從頭到腳每一個毛孔的大量一遍,那估計不嚥氣也要吐血的,咱又不是作Code review,不須要如此拼命。每個好的開源項目,都像是一個美女,這世界沒有十全十美的美女,天然也不會有樣樣傑出的開源項目。每一個美女都有那麼一兩點讓你最心動不已或者倍感神祕的,你會把大部分的注意力都放在上面細細品味,看開源,也是同樣。Chrome對我來講,有吸引力的地方在於(排名分先 後…):api
1. 它是如何利用多進程(其實也會有多線程一塊兒)作併發的,又是如何解決多進程間的一些問題的,好比進程間通訊,進程的開銷;
2. 作爲一個後來者,它的擴展能力如何,如何去權衡對原有插件的兼容,提供怎麼樣的一個插件模型;
3. 它的總體框架是怎樣,有沒有很NB的架構思想;
4. 它如何實現跨平臺的UI控件系統;
5. 傳說中的V8,爲啥那麼快。瀏覽器
但Chrome是一個跨平臺的瀏覽器,其Linux和Mac版本正在開發過程當中,因此我把全部的眼光都放在了windows版本中,全部的代碼剖析都是基於windows版本的。話說,我本是瀏覽器新手、win api白癡以及併發處理的火星人,爲了個人好奇投身到這個溜驢的行業中來,不免有學的不到位看的走眼的時候,各位看官手下超生,有錯誤請指正,實在看不下去,回家本身牽着遛吧。。。
扯淡實在是個體力活,因此後面我會少扯淡多說問題。。。多線程
關於Chrome的源碼下載和環境配置,你們看這裏(windows版本),只想強調一點,必定要嚴格按照說明來配置環境,特別是vs2005的補丁和windows SDK的安裝,不然確定是編譯不過的。。。架構
最後,寫這部分惟一不是廢話的內容,請記住如下這幅圖,這是Chrome最精華的一個縮影,若是你還有空,必定要去這裏進行閱讀,其中重中之重是這一篇。。。併發
![]() |
圖1 Chrome的線程和進程模型 |