Unix五种IO模型

2019-02-17  本文已影响0人  芒果菠萝蛋炒饭

Unix五种IO模型

1、阻塞式I/O:blocking IO

blocking IO的特点就是在IO执行的两个阶段都被block了。

2、非阻塞式I/O: nonblocking IO

  1. 应用进程(application process) 调用了recvfrom这个系统调用
  2. 内核告诉应用进程,数据还没有准备好
  3. 应用进程发现数据没有准备好,不停的调用recvfrom这个系统调用,内核在数据没有准备好的情况下不停的告诉应用进程数据没有准备好。
  4. 内核准备数据。这个过程中,应用进程没有阻塞,因为它在不停的调用!
  5. 在应用进程不停的调用中,恰好这次内核把数据准备好了,然后内核把数据copy到应用进程内存。在内核copy数据期间,应用进程是一直阻塞的。
  6. 内核返回结果,应用进程解除block的状态,重新继续执行

3、I/O复用(select,poll,epoll...):IO multiplexing

  1. 应用进程 调用了select这个系统调用
  2. 内核开始准备数据。在内核准备数据期间,应用进程是一直阻塞的
  3. 内核告诉应用进程数据准备好了
  4. 应用进程(application process) 调用了recvfrom这个系统调用
  5. 内核把数据copy到应用进程内存。在内核copy数据期间,应用进程是一直阻塞的
  6. 内核返回结果,应用进程解除block的状态,重新继续执行

4、信号驱动式I/O(SIGIO):signal driven IO

  1. 应用进程发起一个信号,告诉内核说我需要什么文件,然后直接返回
  2. 内核准备数据。应用进程继续完成后面的逻辑,不会阻塞
  3. 内核准备好数据,告诉应用进程来取数据
  4. 应用进程请求取数据
  5. 内核把数据复制到应用进程。应用进程阻塞
  6. 返回数据

5、异步I/O(POSIX的aio_系列函数):asynchronous IO

  1. 应用进程发起一个信号,告诉内核说我需要什么文件,然后直接返回
  2. 内核准备数据。应用进程继续完成后面的逻辑,不会阻塞
  3. 内核把数据复制到应用进程内存。应用进程不会阻塞
  4. 返回数据

总结

blocking I/O nonblocking I/O I/O multiplexing signal driven I/O (SIGIO) asynchronous I/O
数据准备 阻塞 不阻塞 不阻塞 不阻塞 不阻塞
数据复制 阻塞 阻塞 阻塞 阻塞 不阻塞
上一篇 下一篇

猜你喜欢

热点阅读