莊周夢蝶

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

          最近的工作(mina vs. yanf4j)

          Posted on 2009-06-26 21:46 dennis 閱讀(5662) 評論(4)  編輯  收藏
               最近工作上是在處理一個線程安全的問題,如何保證對某個資源的訪問是獨占的,不會有并發的隱患。在此過程中接了checkthread,一個線程安全的靜態分析工具,通過annotation標記在編譯期檢查可能的并發隱患,提供了一個eclipse插件,有興趣可以看看他的 example。這個東西有個最不好的地方就是要依賴他的自定義annotation,如果不介意的話還是不錯的選擇,一些常見的隱患都能夠標示出來。
              另外就是去了解了下netty3,jboss的子項目,netty2和mina作者的另一個作品,關注它是因為在他的benchmark中,netty3的表現很優秀,可以看這篇報告《Performance comparision between java nio framework》。大概看了下他的設計思路,其實與mina并無多大區別,不過使用了一些有意思的trick,例如對于write的處理,一般的nio框架都是放入一個隊列,然后注冊寫事件(隊列為空的時候),等待寫,寫通常也是單線程去寫。而netty3做了一個優化,發送消息時同樣有一個隊列,在放入隊列后判斷當前是否正在寫循環中,如果正在寫,那么就注冊一個WriteTask喚醒selector等待寫;如果沒有,那么發送線程立即就去執行這個寫操作,這里的一個好處是少了兩個開銷:注冊事件等待觸發以及線程切換。Selector.wakeup的操作是比較昂貴的,netty3也做了優化。更多東西等待探索。

             山寨nio框架yanf4j已經挺久沒有做出任何改進,這次索性將很多過去考慮不成熟、實踐中證明不必要的代碼刪除和簡化,然后做了個與mina 2.0 -M5的性能對比,采用的netty3作者的benchmark源碼,yanf4j的Echo Server如下:
          Echo Server

             最后的分析報表,可以看到yanf4j的性能與mina2的性能相近,不過mina在內存使用上非常狠。此外,Xmemcached 1.1.3 將采用最新的yanf4j 0.7.0。

          (橫坐標是并發連接數,縱坐標是吞吐量,單位為M/s,測試JDK為1.6.4,具體硬件環境不再詳細列出,與xmemcached的benchmark同)

          四張圖分別是在消息長度為64、256、1024、4096字節下的對比。










          評論

          # re: 最近的工作(mina vs. yanf4j)  回復  更多評論   

          2009-07-15 14:28 by 虎.無名
          從圖上看,感覺yanf4j隨著線程增大,性能下降很快呀。而不是像mina2一樣,微微下降,基本保持平穩。會不會像apache一樣,超過一定線程,導致崩潰了?

          # re: 最近的工作(mina vs. yanf4j)  回復  更多評論   

          2009-07-15 15:20 by dennis
          @虎.無名
          這張圖其實已經過時啦,現在沒有這個現象了,我啥時候更新下。

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 清镇市| 叙永县| 紫阳县| 山东| 平安县| 清河县| 松滋市| 承德县| 惠安县| 长寿区| 宕昌县| 南汇区| 连云港市| 浦县| 郁南县| 宝鸡市| 冕宁县| 汉寿县| 尤溪县| 洮南市| 邢台市| 吉木乃县| 汉阴县| 灌南县| 西宁市| 襄樊市| 和平区| 呈贡县| 吕梁市| 贺兰县| 景德镇市| 肃宁县| 安顺市| 永济市| 德昌县| 通辽市| 开鲁县| 宁化县| 宣城市| 云安县| 渑池县|