JAVA——IO模型分类

一、IO模型分类
1. 阻塞IO模型:
  a. 读写过程会出现阻塞现象
  b. 数据没有就绪,用户线程会一直处于阻塞状态,一直读不到数据,造成线程浪费
2. 非阻塞IO模型

  a. While 去read()数据,立即返回结果,数据没有准备好就报错,继续循环read,直到数据准备好,会一直占有cpu去read
3. 多路复用IO模型(使用比较多)
  a. 有一个线程不断去轮询多个socket状态,当socket有读写事件,才调用IO读写操作
  b. 通过一个线程管理多个socket,当socket有读写事件发生才会占用资源进行实际读写操作,并且对达到事件逐一响应
  c. 适合连接数多的情况
  d. 轮询通过内核进行,效率要比用户线程轮询高得多
  e. 事件响应体很大,会导致后续事件处理慢和新增时间轮询
4. 信号驱动IO模型
  a. IO请求--》注册信号函数---》内核数据就绪,发送信号给用户线程--》收到信号,进行实际IO操作
5. 异步IO模型(最理想的IO模型)
  a. 内核等待数据准备完成,然后将数据copy到线程上,发送信号告知线程,数据可以直接使用了。
  b. 与信号驱动IO操作不同的是,发送的信号是告知数据已经可以直接使用,信号驱动时告知线程开始进行IO操作。
  c. 注意:需要操作系统底层支持

原文地址:https://www.cnblogs.com/big-data-hins/p/13377492.html