莊周夢蝶

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

          對kilim nio模塊的改進

          Posted on 2010-11-19 18:40 dennis 閱讀(3957) 評論(3)  編輯  收藏 所屬分類: java 、my open-source

              前段時間對kilim的當前版本做了一些改進,集中在nio調度器這一塊。Kilim新版本引入了nio調度器,可以跟非阻塞IO結合在一起,從這個版本開始,kilim才真正具有實用性。協程只有跟非阻塞IO結合起來才能發揮威力啊。但是Kilim的默認的nio調度器還只是使用一個nio worker做調度,這跟現有的NIO框架采用多個nio worker來提升效率比較起來相對落伍。我改進了NioSelectorScheduler,引入了類似Netty3的boss和woker的概念,boss負責連接接入,而worker負責連接的IO讀寫,并且默認設置worker數目為CPU個數的兩倍。經過我的測試,改進后的NIO調度器的效率遠遠超過了現有的調度器,有興趣可以用netty的benchmark跑一下example里的EchoServer。

              Kilim默認還提供了一個簡易Http Server框架,但是沒有提供Http Client的實現,我的另一個改進是提供了一個簡易的Http Client實現,也是利用Ragel做協議解析,一個簡單的使用例子如下:
          package kilim.examples;

          import kilim.Pausable;
          import kilim.Task;
          import kilim.http.HttpClient;
          import kilim.http.HttpResponse;


          public class SimpleHttpClient {
              
          static class SimpleTask extends Task {
                  @Override
                  
          public void execute() throws Pausable, Exception {
                      HttpClient client 
          = new HttpClient();

                      HttpResponse resp 
          = client.get("http://www.google.com.hk/");
                      System.out.println(resp.status());
                      System.out.println(resp.content());
                  }
              }


              
          public static void main(String[] args) {
                  SimpleTask task 
          = new SimpleTask();
                  task.start();
              }

          }


              這個簡陋的HttpClient目前只支持GET/POST,同時支持Http chunk編碼(得益于kilim原有代碼),做一些簡單的HTTP調用已經足夠。我嘗試在一個項目里使用這個HttpClient去替代java默認的HttpURLConnection,效率有部分提升,但是同時由于大量協程存在占用了很大部分的內存,給GC也帶來了不小的壓力。

              我的代碼直接從kilim的主干fork出來,有興趣可以直接git clone下來玩玩,地址  https://github.com/killme2008/kilim

          評論

          # re: 對kilim nio模塊的改進  回復  更多評論   

          2010-11-22 14:58 by jaedong
          大蝦 你的yanf4j呢

          # re: 對kilim nio模塊的改進  回復  更多評論   

          2010-11-22 18:27 by dennis
          @jaedong
          yanf4j已經放棄了,合并代碼到xmc了。

          # re: 對kilim nio模塊的改進[未登錄]  回復  更多評論   

          2010-12-10 13:52 by littleJava
          你的blog搬到這里了啊……
          我還在je上你的yan4j的資料呢。
          主站蜘蛛池模板: 丘北县| 泸西县| 安阳市| 鄂温| 旬阳县| 高淳县| 翁源县| 浑源县| 年辖:市辖区| 丹江口市| 塔城市| 涞水县| 鲜城| 镇原县| 贵德县| 金乡县| 余姚市| 盐城市| 山东| 海原县| 和平县| 镇平县| 井陉县| 色达县| 星子县| 巴林右旗| 鄂托克前旗| 获嘉县| 香港| 潮安县| 太仆寺旗| 吴堡县| 含山县| 左贡县| 东海县| 卫辉市| 平远县| 定边县| 东丰县| 厦门市| 临澧县|