五种网络IO模型-阻塞I/O、非阻塞I/O、I/O多路复用、信号驱动I/O、异步I/O

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

posted @ 2017-06-26 19:09  懒猫的新窝  阅读(327)  评论(0编辑  收藏  举报