中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術文檔 > 網絡編程 > Chrome源碼剖析
SQL Server2008 Resource Governor 回到列表 無縫的緩存讀取:雙存儲緩存策略
 Chrome源碼剖析

作者:duguguiyu 時間: 2009-04-02 文檔類型:轉載 來自:Venus神廟

第 1 頁
第 2 頁 Chrome的多線程模型 上
第 3 頁 Chrome的多線程模型 下
第 4 頁 Chrome的進程間通信 上
第 5 頁 Chrome的多線程模型 中
第 6 頁 Chrome的多線程模型 下
第 7 頁 Chrome的進程模型
第 8 頁 Chrome的UI繪制
第 9 頁 Chrome的插件模型

2. 進程間的跨線程通信和同步通信

在Chrome中,任何底層的數據都是線程非安全的,Channel不是太上老君(抑或中國足球?...),它也沒有例外。在每一個進程中,只能有一個線程來負責操作Channel,這個線程叫做IO線程(名不符實真是一件悲涼的事情...)。其它線程要是企圖越俎代庖,是會出大亂子的。。。

但是有時候(其實是大部分時候...),我們需要從非IO線程與別的進程相通信,這該如何是好?如果,你有看過我前面寫的線程模型,你一定可以想到,做法很簡單,先將對Channel的操作放到Task中,將此Task放到IO線程隊列里,讓IO線程來處理即可。當然,由于這種事情發(fā)生的太頻繁,每次都人肉做一次頗為繁瑣,于是有一個代理類,叫做ChannelProxy,來幫助你完成這一切。。。

從接口上看,ChannelProxy的接口和Channel沒有大的區(qū)別(否則就不叫Proxy了...),你可以像用Channel一樣,用ChannelProxy來Send你的消息,ChannelProxy會辛勤的幫你完成剩余的封裝Task等工作。不僅如此,ChannelProxy還青出于藍勝于藍,在這個層面上做了更多的事情,比如:發(fā)送同步消息。。。

不過能發(fā)送同步消息的類不是ChannelProxy,而是它的子類,SyncChannel。在Channel那里,所有的消息都是異步的(在Windows中,也叫Overlapped...),其本身也不支持同步邏輯。為了實現同步,SyncChannel并沒有另造輪子,而只是在Channel的層面上加了一個等待操作。當ChannelProxy的Send操作返回后,SyncChannel會把自己阻塞在一組信號量上,等待回包,直到永遠或超時。從外表上看同步和異步沒有什么區(qū)別,但在使用上還是要小心,在UI線程中使用同步消息,是容易被發(fā)指的。。。

3. Chrome中的IPC消息格式

說了半天,還有一個大頭沒有提過,那就是消息包。如果說,多線程模式下,對數據的訪問開銷來自于鎖,那么在多進程模式下,大部分的額外開銷都來自于進程間的消息拆裝和傳遞。不論怎么樣的模式,只要進程不同,消息的打包,序列化,反序列化,組包,都是不可避免的工作。。。

在Chrome中,IPC之間的通信消息,都是派生自IPC::Message類的。對于消息而言,序列化和反序列化是必須要支持的,Message的基類Pickle,就是干這個活的。Pickle提供了一組的接口,可以接受int,char,等等各種數據的輸入,但是在Pickle內部,所有的一切都沒有區(qū)別,都轉化成了一坨二進制流。這個二進制流是32位齊位的,比如你只傳了一個bool,也是最少占32位的,同時,Pickle的流是有自增邏輯的(就是說它會先開一個Buffer,如果滿了的話,會加倍這個Buffer...),使其可以無限擴展。Pickle本身不維護任何二進制流邏輯上的信息,這個任務交到了上級處理(后面會有說到...),但Pickle會為二進制流添加一個頭信息,這個里面會存放流的長度,Message在繼承Pickle的時候,擴展了這個頭的定義,完整的消息格式如下:

圖6 Chrome的IPC消息格式

其中,黃色部分是包頭,定長96個bit,綠色部分是包體,二進制流,由payload_size指明長度。從大小上看這個包是很精簡的了,除了routing位在消息不為路由消息的時候會有所浪費。消息本身在有名管道中是按照二進制流進行傳輸的(有名管道可以傳輸兩種類型的字符流,分別是二進制流和消息流...),因此由payload_size + 96bits,就可以確定是否收了一個完整的包。。。

從邏輯上來看,IPC消息分成兩類,一類是路由消息(routed message),還有一類是控制消息(control message)。路由消息是私密的有目的地的,系統(tǒng)會依照路由信息將消息安全的傳遞到目的地,不容它人窺視;控制消息就是一個廣播消息,誰想聽等能夠聽得到。。。

消息的序列化

前不久讀了Google Protocol Buffers的源碼,是用在服務器端,用做內部機器通信協(xié)議的標準、代碼生成工具和框架。它主要的思想是揉合了key/value的內容到二進制中,幫助生成更為靈活可靠的二進制協(xié)議。。。

在Chrome中,沒有使用這套東西,而是用到了純二進制流作為消息序列化的方式。我想這是由于應用場景不同使然。在服務端,我們更關心協(xié)議的穩(wěn)定性,可擴展性,并且,涉及到的協(xié)議種類很多。但在一個Chrome中,消息的格式很統(tǒng)一,這方面沒有擴展性和靈活性的需求,而在序列化上,雖然key/value的方式很好很強大,但是在Chrome中需要的不是靈活性而是精簡性,因此寧可不用Protocol Buffers造好的輪子,而是另立爐灶,花了好一把力氣提供了一套純二進制的消息機制。。。

出處:Venus神廟
責任編輯:bluehearts

上一頁 Chrome的進程間通信 上 下一頁 Chrome的多線程模型 下

◎進入論壇網絡編程版塊參加討論

相關文章
制作Google Chrome瀏覽器LOGO
web標準優(yōu)秀源碼下載
關鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設計比賽 網頁制作 web標準 用戶體驗 UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點最新 站點最新列表
周大福“敬•自然”設計大賽開啟
國際體驗設計大會7月將在京舉行
中國國防科技信息中心標志征集
云計算如何讓安全問題可控
云計算是多數企業(yè)唯一擁抱互聯網的機會
阿里行云
云手機年終巨獻,送禮標配299起
阿里巴巴CTO王堅的"云和互聯網觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機主題設計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標
數據同步算法研究
用ps作簡單的作品展示頁面
CSS定位機制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:5/91個記錄/頁 轉到 頁 共9個記錄

藍色理想版權申明:除部分特別聲明不要轉載,或者授權我站獨家播發(fā)的文章外,大家可以自由轉載我站點的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權歸我站和作者共有。

轉載要求:轉載之圖片、文件,鏈接請不要盜鏈到本站,且不準打上各自站點的水印,亦不能抹去我站點水印。

特別注意:本站所提供的攝影照片,插畫,設計作品,如需使用,請與原作者聯系,版權歸原作者所有,文章若有侵犯作者版權,請與我們聯系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內容無關的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網上道德,遵守中華人民共和國的各項有關法律法規(guī)
·承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
·本站評論管理人員有權保留或刪除其管轄評論中的任意內容
·您在本站發(fā)表的作品,本站有權在網站內轉載或引用
·參與本評論即表明您已經閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內容
網站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網站UI 設計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設計》
犀利開發(fā)—jQuery內核詳解與實踐
作品集 更多內容

雜⑦雜⑧ Gold NORMANA V2