java nio

什么是nio

NIO是jdk1.4.*(JSR 51)引入的网络IO库,后在jdk1.7(JSR 203)中进行了修正和扩展,提供了同步非阻塞的能力

why NIO

性能、性能,还是性能
C10K问题,如果有1万个同时链接,BIO的方式实现对系统是极大的考验,也是对资源的极大浪费

核心组件

NIO中比较重要的组件有三个, BufferChannelSelector

  • 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

一图胜千言


reactor模式
proactor

推荐阅读更多精彩内容