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

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

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

    放翁(文初)的一畝三分地

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      210 隨筆 :: 1 文章 :: 320 評論 :: 0 Trackbacks

    2010年1月27日 #

         摘要: Beatles小記(三)-分布式數據流分析中Master的橫向擴展  閱讀全文
    posted @ 2012-01-17 13:21 岑文初 閱讀(5248) | 評論 (2)編輯 收藏

         摘要: Beatles小記-分布式數據流分析框架(二),局部代碼設計和實現分享  閱讀全文
    posted @ 2011-12-09 16:44 岑文初 閱讀(4804) | 評論 (4)編輯 收藏

         摘要: 分布式流式數據分析設計和代碼分析  閱讀全文
    posted @ 2011-12-07 16:46 岑文初 閱讀(9659) | 評論 (7)編輯 收藏

         摘要: java優化設計實現細節分享  閱讀全文
    posted @ 2011-09-23 14:03 岑文初 閱讀(5104) | 評論 (1)編輯 收藏

         摘要: 兩個開放平臺內部組件開放   閱讀全文
    posted @ 2011-07-12 11:54 岑文初 閱讀(3768) | 評論 (2)編輯 收藏

         摘要: 討論一下并發消息下行的設計方案和實現  閱讀全文
    posted @ 2011-06-23 12:16 岑文初 閱讀(4547) | 評論 (0)編輯 收藏

         摘要: Jetty內部透明簡單實現  閱讀全文
    posted @ 2011-06-22 17:03 岑文初 閱讀(4006) | 評論 (0)編輯 收藏

         摘要: 慢連接&LazyParser  閱讀全文
    posted @ 2011-06-20 23:47 岑文初 閱讀(5343) | 評論 (0)編輯 收藏

         摘要: PipeComet測試  閱讀全文
    posted @ 2011-06-08 23:58 岑文初 閱讀(6936) | 評論 (0)編輯 收藏

         摘要: 一段代碼,幾句話  閱讀全文
    posted @ 2011-04-13 23:11 岑文初 閱讀(4588) | 評論 (1)編輯 收藏

         摘要: 開放平臺的技術問題  閱讀全文
    posted @ 2011-03-31 00:43 岑文初 閱讀(4821) | 評論 (4)編輯 收藏

         摘要: Web容器測試模型選擇  閱讀全文
    posted @ 2011-03-31 00:40 岑文初 閱讀(3378) | 評論 (0)編輯 收藏

         摘要: 十年  閱讀全文
    posted @ 2011-03-08 23:46 岑文初 閱讀(2917) | 評論 (6)編輯 收藏

         摘要: 模擬登錄看前端門外漢學習  閱讀全文
    posted @ 2011-03-03 23:26 岑文初 閱讀(5537) | 評論 (10)編輯 收藏

         摘要: 邏輯劃分線程池  閱讀全文
    posted @ 2011-03-01 00:32 岑文初 閱讀(5162) | 評論 (4)編輯 收藏

         摘要: OAuth2的一些改變  閱讀全文
    posted @ 2011-02-28 23:01 岑文初 閱讀(3409) | 評論 (0)編輯 收藏

         摘要: “淘寶的”開放平臺  閱讀全文
    posted @ 2011-02-23 23:39 岑文初 閱讀(5080) | 評論 (4)編輯 收藏

         摘要: 交流分享  閱讀全文
    posted @ 2011-02-20 23:58 岑文初 閱讀(4966) | 評論 (7)編輯 收藏

         摘要: ask & answer  閱讀全文
    posted @ 2011-01-12 23:22 岑文初 閱讀(3866) | 評論 (0)編輯 收藏

         摘要: 耗內存應用優化實際案例  閱讀全文
    posted @ 2010-12-22 23:40 岑文初 閱讀(4303) | 評論 (0)編輯 收藏

         摘要: Local Cache的小TIP   閱讀全文
    posted @ 2010-12-14 22:34 岑文初 閱讀(3414) | 評論 (4)編輯 收藏

         摘要: SD開放平臺技術分享  閱讀全文
    posted @ 2010-12-13 20:35 岑文初 閱讀(3199) | 評論 (2)編輯 收藏

         摘要: Facebook優化分享后記  閱讀全文
    posted @ 2010-12-12 19:43 岑文初 閱讀(3444) | 評論 (4)編輯 收藏

         摘要: 這篇文章將會從問題,技術背景,設計實現,代碼范例這些角度去談基于管道化和事件驅動模型的Web請求處理。建議從頭看,能夠從概念上更多的去理解和碰撞,其中的一些描述和例子也許不是很恰當,也希望得到更多的反饋。  閱讀全文
    posted @ 2010-11-25 14:44 岑文初 閱讀(4113) | 評論 (7)編輯 收藏

         摘要: 這篇文章將會從問題,技術背景,設計實現,代碼范例這些角度去談基于管道化和事件驅動模型的Web請求處理。建議從頭看,能夠從概念上更多的去理解和碰撞,其中的一些描述和例子也許不是很恰當,也希望得到更多的反饋。  閱讀全文
    posted @ 2010-11-24 01:26 岑文初 閱讀(3368) | 評論 (4)編輯 收藏

         摘要: 圖片是大綱,先拋出來,后續會有更詳細的文章分享  閱讀全文
    posted @ 2010-11-17 01:00 岑文初 閱讀(2646) | 評論 (2)編輯 收藏

         摘要: 如果關注開放平臺或者關注平臺的一些內容,這篇文章應該有點內容可看  閱讀全文
    posted @ 2010-10-11 23:42 岑文初 閱讀(2920) | 評論 (1)編輯 收藏

         摘要: 美國JavaOne之行內容,需要看直播請關注微博  閱讀全文
    posted @ 2010-09-22 15:55 岑文初 閱讀(1672) | 評論 (1)編輯 收藏

         摘要: 代碼背后的點滴,通過一些設計理念來分享技術的積累  閱讀全文
    posted @ 2010-09-09 02:05 岑文初 閱讀(4293) | 評論 (8)編輯 收藏

         摘要: 面試有感  閱讀全文
    posted @ 2010-09-02 11:31 岑文初 閱讀(2402) | 評論 (4)編輯 收藏

         摘要: 對同學性能優化總結的一點回復  閱讀全文
    posted @ 2010-08-23 16:58 岑文初 閱讀(2288) | 評論 (0)編輯 收藏

         摘要: ppt分享  閱讀全文
    posted @ 2010-08-10 07:48 岑文初 閱讀(3634) | 評論 (2)編輯 收藏

         摘要: 在概念篇介紹完以后,開始實際的對TOP開始做技術改造。(這篇東西更像是對短期工作的總結和匯報,寫的不是很詳實,后續會有一個ppt來深化異步化的一些思想)下面將第一階段的工作做個總結,第一階段主要做了以下幾個方面的事情  閱讀全文
    posted @ 2010-08-06 00:38 岑文初 閱讀(4216) | 評論 (0)編輯 收藏

         摘要: 淘寶一年陳  閱讀全文
    posted @ 2010-07-24 00:34 岑文初 閱讀(2848) | 評論 (7)編輯 收藏

         摘要: Web服務的重放攻擊的一點想法  閱讀全文
    posted @ 2010-07-07 00:40 岑文初 閱讀(3186) | 評論 (0)編輯 收藏

         摘要: Web服務請求異步化介紹  閱讀全文
    posted @ 2010-06-30 08:41 岑文初 閱讀(5232) | 評論 (4)編輯 收藏

         摘要: Web服務請求異步化測試  閱讀全文
    posted @ 2010-06-13 14:35 岑文初 閱讀(4428) | 評論 (9)編輯 收藏

         摘要: 訪問TOP鏈接超時和重置問題  閱讀全文
    posted @ 2010-06-09 13:34 岑文初 閱讀(1718) | 評論 (1)編輯 收藏

         摘要: 對TOP高并發的一點回答  閱讀全文
    posted @ 2010-06-07 21:22 岑文初 閱讀(1761) | 評論 (0)編輯 收藏

         摘要: TOP的價值所在  閱讀全文
    posted @ 2010-06-01 08:49 岑文初 閱讀(3535) | 評論 (5)編輯 收藏

         摘要: 開放平臺兩三點感悟(下)  閱讀全文
    posted @ 2010-06-01 02:53 岑文初 閱讀(3287) | 評論 (4)編輯 收藏

         摘要: 開放平臺兩三點感悟  閱讀全文
    posted @ 2010-05-28 02:29 岑文初 閱讀(4385) | 評論 (6)編輯 收藏

    http://t.sina.com.cn/fangweng

    posted @ 2010-05-24 21:54 岑文初 閱讀(1286) | 評論 (0)編輯 收藏

         摘要: ModJK與tomcat消息傳遞出現的串消息問題  閱讀全文
    posted @ 2010-05-11 20:00 岑文初 閱讀(2773) | 評論 (0)編輯 收藏

         摘要: 異步模式下的Web請求(技術介紹篇)  閱讀全文
    posted @ 2010-04-20 08:50 岑文初 閱讀(4240) | 評論 (1)編輯 收藏

         摘要: Q1技術點滴  閱讀全文
    posted @ 2010-04-02 02:26 岑文初 閱讀(3118) | 評論 (5)編輯 收藏

         摘要: 普通程序員的2009  閱讀全文
    posted @ 2010-01-29 01:34 岑文初 閱讀(2150) | 評論 (4)編輯 收藏

     

    優化雜談

    Author :放翁

    Bloghttp://blog.csdn.net/cenwenchu79/

             當應用遇到規模化問題的時候,就是考慮性能優化的時候了。今天同事和我聊起了NIO在客戶端的使用與BIO有什么優勢,也勾起了我前一陣子和其他同學交流優化的一些想法,純粹個人的一點想法。

    CPU利用率和Load

             在過去做壓力測試的時候,我們經常會關注兩個指標,CPULoad。有同學覺得CPU利用率上去了Load肯定也上去了,Load上去了CPU利用率同樣會上去。但是在一些需要優化的場景下,常常會看到Load很高,CPU利用率卻可能比較低(多核更是可能出現分配不均的情況)。Load其實就是等待處理的任務隊列,當你的應用在等待同步消息返回處理的同時,CPU還是會將時間切片分配給這些線程,而真正需要CPU的線程,卻不得不在到了時間片以后暫時放棄工作被掛起。因此在程序設計的時候就要考慮如何利用好CPU的這個資源,如何均勻的將壓力分攤到各個CPU上(有時候就一個線程在不斷循環,導致單個CPU負荷很高)。

    NIO在客戶端的使用

             Http消息設置keepalive和采用NIO的方式復用信道、BIO結合連接池的方式,最基本的目的就是降低建立TCP產生握手的成本,最大限度的復用已有的資源,但是否NIO就只有復用信道這點呢?

             NIOBIO在數據傳輸和處理的模式上有不同,NIO采用的是BufferPacket+Channel的模式,這其實和操作系統本身的傳輸模式很類似,而BIOStream的模式是Java自己獨特的模式。在采用NIO的這種數據傳輸模式以后,可以充分利用操作系統本身對傳輸的優化,因此這是一方面好處。另一方面異步和事件機制的使用,可以降低對于昂貴的資源申請,在高并發下提高處理能力。

    NIO客戶端的編程模型最大特點:依賴反置,松耦合帶來性能提升。在請求流程協議中支持“票根”,也就是我們說的回執。例如,你今天面試完了,不需要你在阿里巴巴前臺等著結果,直接留個電話,有消息就會直接通知,電話就是通知結果和服務請求者的關聯手段。(此時阿里巴巴前臺和會議室就會有足夠的空間給其他人來面試,這就是資源)

             服務端使用NIO就不多說了,這里主要說一下在客戶端的使用場景。兩者是否真的有很大的差別,是否NIO有絕對的優勢,其實還是和場景有關。簡單說來就一個判斷標準:應用對于通道的利用率是否夠高。下面列了4種場景:

    1. 一次請求數據量很少,服務處理速度很快。

    2. 一次請求數據量很多,服務處理速度很快。

    3. 一次請求數據量很少,服務處理速度很慢。

    4. 一次請求數據量很多,服務處理速度很慢。

    場景1,傳輸效率很高,服務處理速度很快,一次請求很快就被完成,采用NIOBIO,在性能優勢上除了操作系統對NIO的優化以外,BIO連接池不輸于NIO。在易用性上,BIO更加容易處理。(NIO的異步機制,就要求消息傳輸協議需要有會話碼來提供異步處理入口選擇如何處理)

    場景2,傳輸過程比較長,消耗時間比較多,服務處理速度很快,因此交互的時間大部分都還是在數據通道傳輸上,由于NIO在傳輸過程中依然是串行化的,因此BIO的連接池優于NIO,同時NIO一個客戶端只有一個通道,因此BIO開的連接池越大,并行處理能力越強,因此BIO效率比較好一些。

    場景3,傳輸量比較少,服務處理比較慢,很明顯這是通道利用率低的表現,NIO有絕對的優勢,特別是在高并發下。信道和服務端客戶端資源被充分利用。

    場景4,傳輸量比較多,服務處理也比較慢,這時候可以發現信道利用率取決于服務事件和傳輸消耗時間的比例,這類場景某些情況下BIO也會優于NIO

    單線程和多線程

             在使用多線程來優化程序的時候,是否考慮過多線程的使用場景,多線程不是萬能藥,在某些情況下還可能是毒藥。使用多線程的過程中,需要考慮這么幾個因素:

    1. 資源競爭,復雜度增加。

    為什么前面提到的NIO客戶端在處理數據流發送和讀取的時候都是采用單線程,數據流的發送和讀取都是在一個數據通道上的,而讀取和發送本身時間消耗是固定的(不論是多線程還是單線程),同時增加了復雜度(需要處理數據包整合問題)。這其實就是在資源上的串行化操作直接導致了任務的串行化,因此任務多線程反而起到了反作用。

    2. 是否是關鍵路徑的工作,占關鍵路徑的比例。

    首先,在優化以前需要考慮優化的內容是否是關鍵路徑的工作,如果不是,那么增加復雜度實現的多線程模式,就沒有價值。其次就是看是否是在關鍵路徑中占有比較大的比例,同樣的,還是投入產出比例(多線程帶來的復雜度以及在高并發下的一些資源保護措施都需要很多的維護成本)。

    3. 任務的合理切分。

    NIO的客戶端,接受數據的事件將會寫得很輕量級,但是接受到數據然后分析數據還原成業務對象,則會通過線程池的方式來分別處理。就好比監聽連接到來,和實際的去建立連接分成了兩個階段的任務,讓事件型的任務單純,快速執行,讓與業務相關的部分通過多線程并行的方式提高處理效率。總的來說就是把任務劃分成為系統性的任務和業務性的任務,前者消耗時間少,設計盡量簡單高效,采用單線程處理即可,后者通常情況下在處理流程和資源上不沖突的情況可以通過多線程并行提高效率。

             優化應用關注點:

    A.關鍵路徑是否可以優化,關鍵路徑的任務拆分。

    B.關鍵路徑上的單個任務是否可以拆分并行執行。(是否有資源競爭,是否會有流程上的前后依賴,是否增加復雜度引入新的不穩定因素)

    C.系統資源和依賴外部系統是否會成為瓶頸。(單機的CPU,IO都會在一定的壓力下成下降趨勢,并行執行反而降低了處理能力)

    因此,可以看到不論是MapReduce設計下的Hadoop,還是Erlang語言級別的特性,都盡量的希望任務之間可以并行執行,相互之間低耦合,通過異步事件消息通知方式來交互,同時數據沒有共享,防止資源競爭導致無法并行高效處理。系統設計還是要根據場景來判斷使用什么方式優化,越簡單越好。

    posted @ 2010-01-27 01:45 岑文初 閱讀(3665) | 評論 (1)編輯 收藏

    主站蜘蛛池模板: 日本视频一区在线观看免费| 亚洲精品免费在线| 国产片AV片永久免费观看| 九九免费观看全部免费视频| 久久亚洲国产最新网站| 337p欧洲亚洲大胆艺术| 成人亚洲性情网站WWW在线观看| 免费无码不卡视频在线观看| 久久九九兔免费精品6| 九九美女网站免费| 精品国产呦系列在线观看免费| 亚洲精品人成网线在线播放va| 久久精品国产亚洲AV忘忧草18 | 亚洲国产精品人久久电影| 亚洲成色在线综合网站| 亚洲成aⅴ人片久青草影院| 日本高清免费不卡视频| 国语成本人片免费av无码| 18禁黄网站禁片免费观看不卡| 四虎影视无码永久免费| 久久国产精品免费| 亚欧洲精品在线视频免费观看| 美女被免费网站在线视频免费 | 性感美女视频在线观看免费精品| 999在线视频精品免费播放观看| 99视频在线看观免费| 特级精品毛片免费观看| 高清一区二区三区免费视频| 秋霞人成在线观看免费视频| 日批视频网址免费观看| 国产午夜无码片免费| 一个人免费视频在线观看www | 亚洲免费人成在线视频观看| 国产性爱在线观看亚洲黄色一级片| 亚洲成av人片天堂网老年人| 亚洲AV无码一区二三区| 亚洲人成网站观看在线播放| 国产专区一va亚洲v天堂| 亚洲精品国产精品乱码在线观看| 亚洲愉拍99热成人精品热久久| 亚洲熟妇无码另类久久久|