Google Chrome原始碼剖析【序】
【序】
開源是口好東西,它讓這個充斥著大量工業垃圾程式碼和教材玩具程式碼的行業,多了一些藝術氣息和美的潛質。它使得每個人,無論你來自米國紐約還是中國鐵嶺,都有機會站在巨人的肩膀上,如果不能,至少也可以抱一把大腿。。。
現在我就是來抱大腿的,這條粗腿隸屬於 Chrome(開源專案名稱其實是Chromium,本來Chrome這個名字就夠晦澀了,沒想到它的本名還更上一層樓…),Google那充滿狼子野心的瀏覽器。每一個含著金勺子出生的人都免不了被仰慕並被唾罵,Chrome也不例外。關於Chrome的優劣好壞討論的太多了,基本已經被嚼成甘蔗渣
了,沒有人願意再多張一口了。俗話說,內行看門道外行看熱鬧,大部分所謂的外行,是通過使用的真實感受來評定優劣的,這無疑是最好的方式。但偏偏還是有自詡的內行,喜歡說內行話辦外行事,一看到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