国产探花免费观看_亚洲丰满少妇自慰呻吟_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/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇明县| 阿合奇县| 卢氏县| 清镇市| 青铜峡市| 嘉荫县| 牙克石市| 德清县| 通道| 定南县| 刚察县| 海丰县| 海伦市| 宁蒗| 乌拉特后旗| 松江区| 尚志市| 遵义县| 阿瓦提县| 栖霞市| 凤冈县| 渝中区| 肥东县| 馆陶县| 都匀市| 龙海市| 上高县| 阜平县| 罗江县| 达日县| 襄垣县| 西林县| 博兴县| 东平县| 宁夏| 台中市| 霍城县| 井冈山市| 滨州市| 介休市| 全州县|