这个问题太宽泛了.要多深入才算本质的问题.我也不清楚.
1,到现在为止已经不存在传统io了,90%以上的传统io,底层都已经被重写优化成了noi实现,在使用中不用做任何声明,其实就是nio.就连字符操作的Reader与Wirter操作,也有了其nio模式(只不过要特出处理一下).
2,nio使用轮询,io偏重阻塞,其实只是处理数据的表象的问题.这并不是提高效率的本质.只要想,传统io一样可以使用轮询与线程池处理任务.而且如果你以现在最新的jdk进行测试,性能几乎无甚区别
3,nio比传统io最大区别是底层实现,他提出来channels与ByteBuffer的概念.也这是因为这样的概念,与传统的io相比,大幅提高了读写效率.
4,要论述channels的原理,可能需要很久很久时间.这里论述不下.你可以仔细读读<thinking in java>中对nio的论述当作入门资料.
不知道我说的够不够本质,要是再深入,恐怕就需要很久了.
NIO提供了异步IONIO是基本IO的一个补充NIO是和操作系统底层相关的
NIO通常采用Reactor模式,AIO通常采用Proactor模式。AIO简化了程序的编写,stream的读取和写入都有OS来完成,不需 要像NIO那样子遍历Selector。Windows基于IOCP实现AIO,Linux只有eppoll模拟实现了AIO。Java7之前的JDK只支持NIO和BIO,从7开始支持AIO。你说的IO应该指BIO,这种模式需要阻塞线程,一个IO需要一个线程,NIO由一个thread来监听connect事件,另外多个thread来监听读写事件,带来性能上很大提高。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
这个问题太宽泛了.要多深入才算本质的问题.我也不清楚.
1,到现在为止已经不存在传统io了,90%以上的传统io,底层都已经被重写优化成了noi实现,在使用中不用做任何声明,其实就是nio.就连字符操作的Reader与Wirter操作,也有了其nio模式(只不过要特出处理一下).
2,nio使用轮询,io偏重阻塞,其实只是处理数据的表象的问题.这并不是提高效率的本质.只要想,传统io一样可以使用轮询与线程池处理任务.而且如果你以现在最新的jdk进行测试,性能几乎无甚区别
3,nio比传统io最大区别是底层实现,他提出来channels与ByteBuffer的概念.也这是因为这样的概念,与传统的io相比,大幅提高了读写效率.
4,要论述channels的原理,可能需要很久很久时间.这里论述不下.你可以仔细读读<thinking in java>中对nio的论述当作入门资料.
不知道我说的够不够本质,要是再深入,恐怕就需要很久了.
NIO提供了异步IO
NIO是基本IO的一个补充
NIO是和操作系统底层相关的
NIO通常采用Reactor模式,AIO通常采用Proactor模式。AIO简化了程序的编写,stream的读取和写入都有OS来完成,不需 要像NIO那样子遍历Selector。Windows基于IOCP实现AIO,Linux只有eppoll模拟实现了AIO。
Java7之前的JDK只支持NIO和BIO,从7开始支持AIO。
你说的IO应该指BIO,这种模式需要阻塞线程,一个IO需要一个线程,NIO由一个thread来监听connect事件,另外多个thread来监听读写事件,带来性能上很大提高。