五种IO模型
- blocking IO
- non-blocking IO
- IO multiplexing
- signal driven IO
- asynchronous IO
IO过程中,会涉及到用户进程和系统内核两个概念,分两步完成IO。
首先,等待数据准备。
然后,将数据从系统内核copy到用户进程。
阻塞IO
- process 要求 kernal 返回数据
- process 等待
- kernal 开始准备数据
- kernal 准备好数据
- 将数据从内核空间复制到用户空间
- process 处理 数据
kernal准备数据并返回数据的整个过程中,process不能做别的事,这就是所谓的阻塞
非阻塞IO
-
process
要求kernal
返回数据 -
kernal
还没准备好,通知process
没准备好你去干点别的吧 -
process
又问kernal
-
kernal
说还没准备好 -
process
去喝了口水,又问kernal
-
kernal
说准备好了,你来取吧 -
process
开始读取数据(阻塞) -
process
读取数据完成
IO多路复用
-
process
想要kernal
返回数据 -
process
让fd
去做这个事 -
process
把fd
交给select
-
process
问select
可以取数据了么 -
select
说不行,再等等 -
process
问select
可以取数据了么 -
select
说可以 -
process
开始取数据 -
process
取数据完成
异步IO
-
process
想要kernal
返回数据 -
kernal
开始准备数据 ,process
去做别的事情了 -
kernal
把数据准备好,并送到process
手中 -
process
拿到数据了,开始处理数据
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。