<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    資源獲取模式

    Posted on 2008-09-07 22:10 dennis 閱讀(2474) 評論(1)  編輯  收藏 所屬分類: 模式與架構(gòu)java
        任何應(yīng)用都需要與資源打交道,這個資源可能是文件、內(nèi)存、網(wǎng)絡(luò)、數(shù)據(jù)庫、web服務(wù)等。特別是系統(tǒng)的可伸縮性和性能上,一個系統(tǒng)的可伸縮性很大程度上取決于該系統(tǒng)資源管理的可伸縮性。資源的獲取是資源生命周期的起點(diǎn),因此在此階段的優(yōu)化和配置對系統(tǒng)性能、可用性、穩(wěn)定性、可伸縮性的影響是至關(guān)重要的。資源的獲取要解決 這么兩個問題:怎么找到資源,何時獲取資源。
        資源的超找可以通過lookup模式,所謂lookup模式就是引入一個查找服務(wù)作為中介,讓資源使用者可以 找到并使用資源提供者提供的資源。這方面一個顯然的例子就是JNDI,我們通過JNDI查找EJB、數(shù)據(jù)庫連接池等,另一個例子就是RMI,客戶端通過命名服務(wù)查找到遠(yuǎn)程對象。查找服務(wù)提供查詢語言,也提供接口讓服務(wù)注冊到它的容器內(nèi)。
        何時獲取資源?根據(jù)時機(jī)的不同可以分為預(yù)先獲取模式和延遲獲取模式。如果對系統(tǒng)的可用性和運(yùn)行時性能要求比較高,那么可能你會預(yù)先加載或者分配所要用到的資源,通過一個資源提供者的代理對象攔截對資源的請求,返回預(yù)先加載或者分配的資源,從而提高系統(tǒng)性能。這方面的例子就是 memcached,memcached啟動時預(yù)先分配內(nèi)存來提高性能(相應(yīng)的帶來的是內(nèi)存的不能有效利用)。線程池、數(shù)據(jù)庫連接池也是預(yù)先獲取模式的例子,通過預(yù)先創(chuàng)建的線程或者數(shù)據(jù)庫連接,來提高系統(tǒng)的整體性能。反之,延遲獲取模式就是盡可能到使用資源的最后一刻才去獲取資源,一開始返回的只是一個資源的代理對象,真正使用到資源的時候由這個代理對象去加載實(shí)際的資源。延遲獲取模式的例子也很多,例如 Hibernate的延遲加載,延遲加載的對象其實(shí)是一個代理類(通過java動態(tài)代理或者cglib增強(qiáng)),只有真正用到的時候才去數(shù)據(jù)庫獲取實(shí)際的數(shù) 據(jù)。函數(shù)式編程中的延時求值也是延遲獲取模式的例子,沒有求值前只是個promise,求值到的時候才force執(zhí)行。Singleton模式下的單例也常常做延遲初始化,這是延遲獲取模式的特化。
        如果資源的大小很大、極大或者是未知尺寸,預(yù)先獲取會導(dǎo)致系統(tǒng)速度的緩慢甚至耗盡系統(tǒng)資源,延遲獲取在獲取的時候也可能時間過長難以忍受或者耗盡系統(tǒng)資源,兩者都不適合,解決辦法就是分步獲取,這就是所謂部分獲取模式。將資源的獲取分為兩步或者多步,每一步獲取一定數(shù)目的資源,每一步獲取資源也可以采用預(yù)先或者延遲的策略。這樣的例子如socket讀數(shù)據(jù)到緩沖區(qū),一次可能只讀一部分?jǐn)?shù)據(jù)到緩沖區(qū),分步才讀完。再比如web頁面一棵樹的展 現(xiàn),一開始可能只是顯示部分節(jié)點(diǎn),在需要查看一些節(jié)點(diǎn)的時候才會通過ajax加載和展開它們的子結(jié)點(diǎn)乃至深層子結(jié)點(diǎn)。

    參考:POSA3 第二章

    評論

    # re: 資源獲取模式  回復(fù)  更多評論   

    2008-09-08 09:34 by Jack.Wang
    說的很好,其實(shí)微觀點(diǎn)每個對象都是一個資源,資源的獲取在設(shè)計(jì)上應(yīng)該盡量在一個進(jìn)程中,跨進(jìn)程就會有網(wǎng)絡(luò)開銷(即使在同一臺機(jī)子),比如分布式的 CORBA,RMI,EJB,就會影響性能,所以在性能要求高的應(yīng)用中盡量本地獲取資源,即單進(jìn)程,大家可以看看 ebay, myspace 等等的大型網(wǎng)站的架構(gòu)。
    主站蜘蛛池模板: 久久被窝电影亚洲爽爽爽| 浮力影院第一页小视频国产在线观看免费| 亚洲国产香蕉碰碰人人| 国产精品美女久久久免费 | 在线免费观看a级片| 亚洲制服丝袜一区二区三区| 最近免费视频中文字幕大全| 亚洲AV成人无码久久精品老人| baoyu116.永久免费视频| 亚洲人成网站在线播放vr| 亚洲国产成人精品无码区在线秒播| 久久久久国色av免费看| 亚洲综合一区二区精品导航| 99精品免费观看| 亚洲成AV人综合在线观看| 成人福利免费视频| 亚洲第一男人天堂| 国产又粗又猛又爽又黄的免费视频| 午夜亚洲WWW湿好爽| 国产免费131美女视频| 四虎影视永久在线精品免费| 久久久久亚洲AV综合波多野结衣| 91免费在线视频| 亚洲精品第一国产综合精品| 我要看WWW免费看插插视频| 国产亚洲漂亮白嫩美女在线| JLZZJLZZ亚洲乱熟无码| 免费人成毛片动漫在线播放| 亚洲国产综合第一精品小说| 日韩伦理片电影在线免费观看| GOGOGO高清免费看韩国| 麻豆亚洲av熟女国产一区二| 成人毛片视频免费网站观看| 一级全免费视频播放| 久久精品国产亚洲AV麻豆网站 | 亚洲AV无码乱码在线观看代蜜桃 | 亚洲成在人天堂在线| 麻豆国产入口在线观看免费| 国产男女爽爽爽免费视频| 亚洲美女免费视频| mm1313亚洲精品无码又大又粗|