庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

对kilim nio模块的改进

Posted on 2010-11-19 18:40 dennis 阅读(3542) 评论(3)  编辑  收藏 所属分类: javamy 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的资料呢。

只有注册用户登录后才能发表评论。


网站导航: