首页 > 代码库 > 谈I/O模型

谈I/O模型

一个IO操作涉及两个系统对象:

  • 调用这个IO的用户Process/Thread
  • 系统内核 - System Kernel

一个具体的Read操作包括两个阶段:

  • 内核等待数据准备就绪:Waiting for the data to be ready
  • 从内核向用户进程/线程拷贝数据:Copying the data from the Kernel to the Process/Thread

只有在同步的情况下才会有“阻塞”和“非阻塞”之说,异步情况,必须是非阻塞的!

同步 vs 异步

同步与异步是针对应用程序与内核的交互而言的,进程/线程触发IO操作后:

  • 同步过程:进程/线程等待IO操作完成(阻塞)或轮询查看IO操作是否完成(非阻塞);
  • 异步过程:直接返回,进程/线程做自己的事情,IO操作交给内核处理、完成后内核通知进程/线程;

同步 Synchronous

A Synchronous-I/O operation causes the requesting process to be blocked until that I/O operation completes.

 串行,无条件等待。

异步 Asynchronous

An Asynchronous-I/O operation does not cause the requesting process to be blocked.

 并发,

阻塞 vs 非阻塞

关于阻塞/非阻塞,在网络编程中通常应用在是不是需要等待数据就绪。

阻塞 Blocking

 挂起等待,

非阻塞 Non-Blocking

 轮询检查等待,

参考:怎样理解阻塞非阻塞与同步异步的区别? - 知乎;

I/O模型

阻塞I/O(Blocking I/O)

技术分享

非阻塞I/O(Non-Blocking I/O)

技术分享

I/O多路复用(I/O Multiplexing)

技术分享

信号驱动I/O(Signal Driven I/O)

技术分享

异步I/O(Asynchronous I/O)

技术分享

 

推荐书籍

  • 《UNIX网络编程 - 卷1》:第六章

参考

  • 我和女友解释I/O模型;
  • Java NIO:浅析I/O模型 - 海子; 也谈同步异步I/O;
  • IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇);

谈I/O模型