客户端NIO实践分析

来源:互联网 发布:c语言入门教学视频 编辑:程序博客网 时间:2024/06/09 16:20

http://java.csdn.net/index.php/2009/09/23/专家专栏第二期:客户端nio实践分析/

 

传统IO操作和NIO操作的区别

1.对于数据处理由Stream方式转变称为了Block方式。

第一种转变不适合需要对于字节流做处理的场景。(需要对字节充分作处理,例如我在另一个优化中对于字节流采用lazy Analysis,通过边解析边交验的方式,提前过滤无效请求,降低由于分析大数据包无效请求带来的性能消耗)。

2.事件驱动机制替换了传统的一个线程处理到底的模式。

但是Block传输和处理这种转变符合操作系统的真实模式,使Java可以充分利用各个操作系统的实现来优化性能,同时管道的思想也符合操作系统的真实实现(原来Java都是将双向通道拆分为In,Out的)。事件驱动使得完整的处理流程被拆分成为流水线作业,最大程度上利用了资源,防止后端处理成为了前端请求的瓶颈,降低了服务器的吞吐量,同时最大限度的给开发者优化流程,缩短关键路径的机会。

 

下面表格大致列举了传统IO和NIO在客户端使用的需求和各自的优势(两者都需要的就不列入其中了,例如容错恢复等)

 需求优势IO(连接池)1. 连接池的管理。2. 高并发大压力下Socket数量庞大,对于文件句柄消耗也大1. 数据发送接受处理简单,单线程模式。2.可以对字节流逐一解析,避免内存过分无谓消耗NIO1. 交互的协议需要支持会话。(也可以不支持,这就会使得处理模式退化,效率下降,后续会谈到)2. 对于接收和发送需要支持多线程,提高效率3. 需要对Channel和Block有所熟悉1. 资源利用率最大化,性能提升(消息通道的充分利用,操作系统IO优化的使用)2. 充分灵活的将处理分割为多个工作项,流水线作业,减小业务处理对服务器服务请求接收吞吐量的影响。

 

 

原创粉丝点击