1.阻塞I/O模型
我去面馆吃面,点了碗面条,我也不知道做面条需要多久,也不敢出去,只能在那里坐着等。等值师傅做完面,我吃完面条后,再去逛街。这里的吃面就是I/O操作。
2.非阻塞I/O模型
我不甘心在这里等着无聊,我想这段时间继续逛商场,但是又怕面条做好了,所以,我逛一会就回来吧台看一眼!为了吃碗面,来来回回跑,差点没跑断腿!
3.I/O多路复用
我同时在不同的地方点了菜,要跑来跑去的轮询几十遍,累死了。后来,善良的管理员安装了电子屏幕:上面写着每个菜的状态,我需要去看屏幕,就知道数据准备好了没有。著名的select、poll、epoll的差别就在这里。
4.信号驱动
管理员装了个短信系统,面做好了就发短信给我,但是由于成本原因,这个短信只发一次,而且在峰值的时候短信队列会有延时!
5.异步I/O
面馆的老板有个外面送餐员,面做好了,就派他直接送货上门。
同步与异步
实际上同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。同步与异步如下图所示:
阻塞与非阻塞
简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。详细区别如下图所示:
参考: http://www.open-open.com/doc/view/cbb2c3363c3b49ceb5812220a9c42e42
http://blog.csdn.net/historyasamirror/article/details/5778378
http://www.cnblogs.com/Anker/p/3254269.html
http://www.cnblogs.com/nufangrensheng/p/3588690.html
信号驱动与异步驱动的区别:http://www.cnblogs.com/kamicoder/p/6476723.html