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