0%

IO模型

IO模型

对IO的变成模型一直比较模糊,分不清楚什么同步阻塞,同步非阻塞等概念,对理解一些网络编程框架造成不少的困扰,花时间理了一下,有理解不到位的地方,烦请客官留言。

Unix编程中将IO模型分为5种:

  1. 阻塞IO
  2. 非阻塞IO
  3. IO复用
  4. 信号驱动IO
  5. 异步IO 首先,当应用发起一个IO操作,分为两个步骤:
  6. 发起IO请求:IO请求一般需要请求特殊资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。
  7. 真正的IO操作:真正进行数据传输

阻塞非阻塞的区别就在发起IO请求这步进行区分:
应用程序发起IO请求后是否能立即返回

  • 不能立即返回的称为阻塞IO:即资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。
  • 立即返回的称为非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用。

同步异步的区别在真正IO操作这步进行区分:
在将数据从内核拷贝到应用缓冲区期间是否阻塞

  • 不阻塞的称为异步IO:操作系统帮应用做完IO操作再将结果返回给应用(应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用)
  • 阻塞的称为同步IO:实际IO读写阻塞应用进程(应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败)

综上,前4种属于同步IO,最后一种是异步IO。即:

  1. 阻塞IO(同步阻塞IO)
  2. 非阻塞IO (同步非阻塞IO)
  3. IO复用 (同步非阻塞IO)
  4. 信号驱动IO (同步非阻塞IO)
  5. 异步IO (异步IO)

小生不才,以上如有描述有误的地方还望各位不吝赐教 !^_^!