IO - 同步,异步,阻塞,非阻塞,AIO

IO - 同步,异步,阻塞,非阻塞

阻塞与非阻塞(进程有没有挂起)
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.(就是进程有没有被挂起)

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。


同步与异步(调用有没有等待返回结果)
同步和异步关注的是消息通信机制(调用得到的是不是结果(想要的内容),而不是设置状态和操作状态的返回)

所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由*调用者*主动等待这个*调用*的结果。

而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,
调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。


阻塞I/O模型(同步阻塞)



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


非阻塞IO模型(同步非阻塞)



IO执行的第二个阶段被block了


IO复用模型(同步阻塞(但可以同时处理多个IO))



两个阶段都被block了


信号驱动IO(异步)



第二个阶段被block了


异步IO模型(异步非阻塞)



二个阶段没有被block,但占用内存空间较多(因为要准备好数据空间用于内核将数据复制到用户空间)


5个I/O模型的比较





AIO(异步非阻塞IO):
就是在进行IO调用时要准备好数据存放的空间,调用时告诉内核这个空间的地址,当有数据到达时,内核在这个
空间中得到数据或写数据到这个空间,内核读/写好后就发送通知或回调使进程知道这个事。



参考原文件: http://www.cnblogs.com/renxs/p/3683189.html

猜你喜欢

转载自huangyongxing310.iteye.com/blog/2322912