• BIO

    • B是Blocking,阻塞的意思,所有建立的连接会在内存中一直监听,也就是线程阻塞直到有io请求变化的时候才会继续往下执行

    • 由于每一个连接都占内存,所以连接数是有上限的

  • NIO

    • N是Non-Blocking,不阻塞的意思
    • 调用java层面封装的 selector多路复用器
      • 名字解释:BIO是遍历每个连接进行检查是否有IO操作,NIO是直接监听就绪事件列表rdlist,将多个监听变为一个监听
    • 核心原理是通过调用linux内核的epoll的三个函数做操作(windows是基于winsock2)
      • epoll_create 创建监听实例
      • epoll_ctl 监听是否有IO操作,若存在则将该IO操作放在就绪事件列表rdlist
      • epoll_wait 线程等待监听就绪事件列表rdlist,一旦存在则处理该IO操作

面试题:

  • select、poll、epoll的区别
    • select、poll是BIO的模型,select的连接数有上限,poll无上限
    • epool是NIO的模型(JDK1.5及以上存在)