新的代碼已經(jīng)上傳,請在 https://x-framework.googlecode.com/svn/trunk 更新
這一次的更新有些倉促,主要是有一些網(wǎng)友希望能早些看到chrome的tab頁效果的具體實(shí)現(xiàn),目前來講還有一些沒實(shí)現(xiàn)的地方,會導(dǎo)致一些bug,下載代碼調(diào)試的時候,請忽視異常,勇敢的按下f5,不能正常退出請終止調(diào)試或者殺掉進(jìn)程,任何崩潰不能退出的地方都有可能,僅故學(xué)習(xí)參考。
一些截圖:
我認(rèn)為chrome的架構(gòu)在三個方面做的非常好:通知系統(tǒng)(線程模型/觀察者模式)、preference系統(tǒng)和extension擴(kuò)展系統(tǒng),非常具有互聯(lián)網(wǎng)客戶端特征,大部分功能都可以重用。適合搭建互聯(lián)網(wǎng)客戶端平臺,然而在中國能駕馭如此全面架構(gòu)的互聯(lián)網(wǎng)企業(yè)應(yīng)該也不多,小步跑多迭代需要依賴可靠的平臺。其多進(jìn)程的架構(gòu)模型,好處自然不用多說,然而需要的架構(gòu)水平之高恐怕很難在實(shí)際開發(fā)中真正全部跑起來。
下面是所在團(tuán)隊使用chrome遇到問題時候,我做的一些研究分析,在分析前我對chrome內(nèi)部的線程對象關(guān)系也很模糊,希望對他人有用。
chrome在線程和對象之間運(yùn)作的一些基礎(chǔ)技巧,總體來講使用了三種設(shè)施,而不是一刀切,一個不規(guī)范的報告如下:
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
同一線程同一對象的方法異步調(diào)用 ScopedRunnableMethodFactory能保證對象自身異步方法調(diào)用的安全性
同一線程不同對象之間的通知 調(diào)用者派生NotificationObserver,通過NotificationRegistrar把自己注冊到通知系統(tǒng),通知源觸發(fā)NotificationService 訂閱模式,線程內(nèi)同步調(diào)用,不存在對象生命周期的問題
MessageLoopProxy是線程安全的引用計數(shù)對象,內(nèi)部封裝了線程消息循環(huán),MessageLoop銷毀的時候會置空其MessageLoopProxy中的消息循環(huán),支持線程安全的異步調(diào)用,適合在不同線程之間回調(diào),回調(diào)過程是異步的,所以牽扯到的參數(shù)必須考慮對象生命周期以及對象方法調(diào)用的線程問題。我的想法就是回調(diào)的對象最好是生命周期跟application的一致的大對象,充當(dāng)manager(這也正是一個管理者該做的事情),這樣就能維持回調(diào)對象的合法性。
chrome推薦多使用非線程安全對象,也就是對象方法的執(zhí)行都在對象創(chuàng)建的線程
Application<----------------------------------------------------------
|--------|... |
V V |
UI線程 文件讀寫線程 數(shù)據(jù)庫讀寫線程 網(wǎng)絡(luò)線程 ... |
UIMgr FileIOMgr DatabaseIOMgr NetIOMgr |
Obj... Obj... ... ... |
Obj... Obj... ... ... ---
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
在chrome中運(yùn)用最多的是第二種技法,因?yàn)楸旧砭蜎]有那么多對象需要跨線程;其次是第三種,因?yàn)榛ヂ?lián)網(wǎng)客戶端確實(shí)存在不少的多線程數(shù)據(jù)管理;最后是第一種技法,這種情況較為少見。
至于全面詳盡的剖析,我沒有精力或者暫時沒有勇氣去整理。后面代碼的更新可能也會減緩,自己會考慮在如何使用這套框架做一些東西。
posted on 2011-09-14 23:45
萬連文 閱讀(7330)
評論(31) 編輯 收藏 引用 所屬分類:
小作品