国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

網絡IO之阻塞、非阻塞、同步、異步總結

2024-06-28 13:19:37
字體:
來源:轉載
供稿:網友
網絡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/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清徐县| 商洛市| 苗栗市| 金坛市| 博爱县| 卓尼县| 视频| 滕州市| 邯郸县| 晋城| 漠河县| 新干县| 射阳县| 正蓝旗| 固安县| 连江县| 通化市| 寻甸| 商河县| 达孜县| 汾西县| 古丈县| 西吉县| 东宁县| 扎鲁特旗| 浦江县| 沈丘县| 青铜峡市| 阿拉善盟| 桃园市| 长沙县| 凉山| 丰县| 苍南县| 天气| 禹城市| 阳朔县| 碌曲县| 柏乡县| 嘉兴市| 乐亭县|