什么是nio
NIO是jdk1.4.*(JSR 51)引入的网络IO库,后在jdk1.7(JSR 203)中进行了修正和扩展,提供了同步非阻塞的能力
why NIO
性能、性能,还是性能
C10K问题,如果有1万个同时链接,BIO的方式实现对系统是极大的考验,也是对资源的极大浪费
核心组件
NIO中比较重要的组件有三个, Buffer、 Channel和 Selector
- Buffer
用于与Channel交互,Channel读写数据使用Buffer,本质是一块包装起来的内存,提供了一些方便的读写接口,如 XXXBuffer.allocate XXXBuffer.put XXXBuffer.get XXXBuffer.flip XXXBuffer.rewind等等 - Channel
想较于流,支持双向操作,可以异步读写,基于Buffer - Selector
多路复用的核心组件,非阻塞的关键,在不同平台下封装了OS细节,Linux下是epoll的封装(2.6)以后
Reactor vs Proactor
一图胜千言