首页 > java, performance > nio的一些特性解析

nio的一些特性解析

最近在回顾以前学过的知识,看到了nio,想想有必要再重新整理一下。这里说的NIO,指的是JDK1.4种的NIO,非NIO2.

通过来说,数据处理一般根据同步,异步,阻塞,非阻塞四种情况的两两组合。这里谈的NIO是一种同步非阻塞的通信模型。
从大的方面看,NIO分为了 channel , buffer , select

channel

这个是对于资源的抽象,对于所有的数据读写抽象为channel,同时为了性能考虑,这个channel是一个环形队列。没有了单向队列阻塞问题,也没有了双向队列的同步问题。所以说是一种比较高效的队列

 

buffer

在默认实现中采用的是堆外内存,也就是这块内存不是在堆上分配。优点就是没有jvm 在gc时候的内存碎片整理问题,直接分配的是一块连续的空间。其次堆外内存通过OS的内存映射技术,减少了数据在用户空间和内核空间的数据复制,这样大大提升了处理的性能。
有优势肯定是有缺点,就是这块空间的开启和销毁陈本相对于堆内分配要高

select

这个底层依赖于epoll的编程模型,本质上通过文件分配符的回调机制解决事件通知问题。我们比较常见的事件通知就是轮训,这种就存在事件通知的延迟,这个延迟取决于事件数的多少。

 

总结

总结的看,1.4版本的JDK还是一种同步非阻塞的IO模型,在JDK1.7中实现了异步非阻塞的IO模型,也就是现在说的NIO2

分类: java, performance 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.