你的位置:首页 > 操作系统

[操作系统]网络IO之阻塞、非阻塞、同步、异步总结


网络IO之阻塞、非阻塞、同步、异步总结

1、前言

  在网络编程中,阻塞、非阻塞、同步、异步经常被提到。unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解。网上有详细的分析:http://blog.csdn.net/historyasamirror/article/details/5778378。我结合网上博客和书总结一下,加以区别,加深理解。

2、数据流向

  网络IO操作实际过程涉及到内核和调用这个IO操作的进程。以read为例,read的具体操作分为以下两个部分:

  (1)内核等待数据可读

  (2)将内核读到的数据拷贝到进程

详细过程如下图所示:

3、网络IO模型详细分析

  常见的IO模型有阻塞、非阻塞、IO多路复用,异步。以一个生动形象的例子来说明这四个概念。周末我和女友去逛街,中午饿了,我们准备去吃饭。周末人多,吃饭需要排队,我和女友有以下几种方案:

  (1)我和女友点完餐后,不知道什么时候能做好,只好坐在餐厅里面等,直到做好,然后吃完才离开。

女友本想还和我一起逛街的,但是不知道饭能什么时候做好,只好和我一起在餐厅等,而不能去逛街,直到吃完饭才能去逛街,中间等待做饭的时间浪费掉了。这就是典型的阻塞。网络中IO阻塞如下图所示:

  (2)我女友不甘心白白在这等,又想去逛商场,又担心饭好了。所以我们逛一会,回来询问服务员饭好了没有,来来回回好多次,饭都还没吃都快累死了啦。这就是非阻塞。需要不断的询问,是否准备好了。网络IO非阻塞如下图所示:

  (3)与第二个方案差不多,餐厅安装了电子屏幕用来显示点餐的状态,这样我和女友逛街一会,回来就不用去询问服务员了,直接看电子屏幕就可以 了。这样每个人的餐是否好了,都直接看电子屏幕就可以了,这就是典型的IO多路复用,如select、poll、epoll。网络IO具体模型如下图所 示:

  (4)女友不想逛街,又餐厅太吵了,回家好好休息一下。于是我们叫外卖,打个电话点餐,然后我和女友可以在家好好休息一下,饭好了送货员送到家 里来。这就是典型的异步,只需要打个电话说一下,然后可以做自己的事情,饭好了就送来了。linux提供了AIO库函数实现异步,但是用的很少。目前有很 多开源的异步IO库,例如libevent、libev、libuv。异步过程如下图所示:

4、同步与异步

  实际上同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。同步与异步如下图所示:

5、阻塞与非阻塞

  简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。详细区别如下图所示:

 

参考资料:

http://www.open-open.com/doc/view/cbb2c3363c3b49ceb5812220a9c42e42

http://blog.csdn.net/historyasamirror/article/details/5778378

http://www.zhihu.com/question/19732473

http://www.ibm.com/developerworks/cn/linux/l-async/





深圳去四川旅游报价跟团去四川旅游多少钱几月去四川旅游最好去四川的旅游团价格去四川旅游必去景点北京欢乐谷有什么好玩的?怎么去? 深圳东部华侨城及周边游什么好玩的? 盘龙峡生态旅游区官网?盘龙峡生态旅游区官方网站? 2015盘龙峡生态旅游区门票价格?盘龙峡生态旅游区好玩吗? 海口到亚洲论坛永久会址怎么走?博鳌亚洲论坛永久会址自驾车路线? 告别穹顶 南宁最便捷的清肺好去处 亚洲论坛永久会址地址?博鳌亚洲论坛永久会址在哪里? 大云雾山什么时候去最好?云浮大云雾山最佳旅游季节? 珠海到中山逍遥谷自驾攻略?珠海到中山逍遥谷路线? 深圳到中山逍遥谷怎么走?深圳到中山逍遥谷路线? 中山逍遥谷度假村团购价格?中山逍遥谷森林公园多少钱? 中山人民医院到逍遥谷怎样乘车?中山人民医院到逍遥谷乘车路线? 迪拜签证的有效期是多久? 马尔代夫满月岛怎么样?马尔代夫满月岛怎么去? 马尔代夫机场到天堂岛怎么走? 泰国哪个海滩好玩?泰国芭东海滩旅游 IDT72V3640L6BB8 Datasheet IDT72V3640L6BB8 Datasheet IDT5V5218PGGI8 Datasheet IDT5V5218PGGI8 Datasheet IDT71V3558S200BG Datasheet IDT71V3558S200BG Datasheet 吉林到香港两天游 吉林到香港两天游 吉林到香港两天游 牡丹江到港澳三天旅游 牡丹江到港澳三天旅游 牡丹江到港澳三天旅游 吉林去香港两天一晚游 吉林去香港两天一晚游 吉林去香港两天一晚游