对kilim nio模块的改进

简介:

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

对kilim nio模块的改进

Posted on 2010-11-19 18:40 dennis 阅读(3472) 评论(3)   编辑   收藏 所属分类: javamy open-source 338504.html?webview=1

    前段时间对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
文章转自庄周梦蝶  ,原文发布时间 2010-11-19
目录
相关文章
|
4天前
|
存储 Java 数据处理
|
4天前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
4天前
|
监控 Java
Java一分钟之-NIO:非阻塞IO操作
【5月更文挑战第14天】Java的NIO(New IO)解决了传统BIO在高并发下的低效问题,通过非阻塞方式提高性能。NIO涉及复杂的选择器和缓冲区管理,易出现线程、内存和中断处理的误区。要避免这些问题,可以使用如Netty的NIO库,谨慎设计并发策略,并建立标准异常处理。示例展示了简单NIO服务器,接收连接并发送欢迎消息。理解NIO工作原理和最佳实践,有助于构建高效网络应用。
8 2
|
4天前
|
缓存 Java API
Java NIO和IO之间的区别
NIO(New IO),这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。
17 1
|
4天前
|
监控 Java 开发者
深入理解 Java 网络编程和 NIO
【4月更文挑战第19天】Java网络编程基于Socket,但NIO(非阻塞I/O)提升了效率和性能。NIO特点是非阻塞模式、选择器机制和缓冲区,适合高并发场景。使用NIO涉及通道、选择器和事件处理,优点是高并发、资源利用率和可扩展性,但复杂度、错误处理和性能调优是挑战。开发者应根据需求选择是否使用NIO,并深入理解其原理。
|
4天前
|
存储 监控 Java
浅谈Java NIO
浅谈Java NIO
7 0
|
4天前
|
消息中间件 存储 Java
【Java NIO】那NIO为什么速度快?
是这样的,在NIO零拷贝出现之前,一个I/O操作会将同一份数据进行多次拷贝。可以看下图,一次I/O操作对数据进行了四次复制,同时来伴随两次内核态和用户态的上下文切换,众所周知上下文切换是很耗费性能的操作。
31 1
【Java NIO】那NIO为什么速度快?
|
4天前
|
存储 监控 Java
Java输入输出:什么是NIO(New I/O)?
Java NIO是一种高效I/O库,特征包括非阻塞性操作、通道(如文件、网络连接)、缓冲区和选择器。选择器监控通道状态变化,通知应用程序数据可读写,避免轮询,提升性能。示例代码展示了一个使用NIO的服务器,监听连接、读取数据并处理客户端通信。
14 1