理解網路I O

2021-10-07 07:39:37 字數 1880 閱讀 8814

1,概念:

i/o,就是input/output,也就是輸入輸出。

比如對乙個檔案,乙個socket 的寫入/讀取就是乙個i/o

磁碟i/o,操作檔案的i/o,比如給檔案寫入資料,讀取資料

網路i/o,對乙個socket連線的i/o,比如乙個tcp連線,客戶端和服務端的寫入,讀取

注意:本文的i/o模型只討論網路i/o

2,五大i/o模型

1總覽

對於網路i/o操作,抽象了五大i/o模型,分別是

1,阻塞i/o

2,非阻塞i/o

3,i/o多路復用

4,訊號驅動i/o

5,非同步i/o

2詳情

1,阻塞i/o (blocking i/o)

應用程式在發出接收資料請求(recvfrom)後,如果資料沒有準備就緒,則當前程序會一直

等待到資料準備就緒後再開始處理資料。等待期間程序是阻塞的,不能幹其他事情,整個過程中

就是傻傻等待的狀態。也是最簡單的一種i/o模型

生活例項:

乙個人在釣魚,魚沒有上鉤的時候,人一直在傻傻等待。

2,非阻塞i/o (non-blocking i/o)

應用程式在發出資料接收請求後,會把當前套接字設定為非阻塞,也就是說當前請求能否接收到

資料都不會阻塞接下來需要執行的任務。

如果要獲取到資料,需要客戶端後續不斷輪詢請求直到接收到資料。

生活例項:

乙個人把魚竿扔進水裡之後,玩手機去了,每隔一段時間看看魚上鉤了沒有

3,i/o多路復用 (multiplexing i/o)

i/o多路復用,比如有多個socket連線發出了接收資料的請求,按照正常的阻塞i/o的話,會按照

順序等待這些socket乙個乙個資料就緒之後,逐個返回。多路復用的話,服務端會在當前程序輪詢

管理這些socket,再把可用socket返回資料。不可用的socket輪詢繼續監聽。

注意這些socket連線是非阻塞的,但是當前維護socket的程序會阻塞。也就是說socket都不可用

的時候,就會阻塞等到第乙個可用socket的出現

生活例項:

十個魚竿扔到水裡,然後看著哪個魚竿上鉤了,就釣哪條。

4,訊號驅動i/o (signal-driven i/o)

但應用程式傳送資料接受請求同時會給當前請求註冊乙個訊號函式。然後當前程式執行後續操作,

等到資料準備就緒後,核心就會給應用程式傳送乙個訊號,便可以執行訊號函式中的操作(訊號函

數中處理接收資料的事情)

生活例項:

給魚竿裝乙個感測器,玩手機去了,魚上鉤的時候感測器響了,然後再把魚拉上來

5,非同步i/o

前面四種i/o復用模型都是同步的,區別於非同步i/o模型。

應用程式傳送乙個接受資料請求,告知系統核心並且讓核心做整個(i/o)操作,操作完成後通知應用程式。

這裡和訊號模型有點像,具體的區別就是,訊號模型下,資料就緒後通知應用程式,讓應用程式來

完成i/o操作。而非同步,是通知應用程式我已經完成了i/o操作,也就是應用程式和發起的i/o操作

是非同步完成的,應用程式做自己的事情,核心幫助應用程式完成i/o操作。

生活例項:

非同步實現要依賴底層支援,類似生活例項中釣魚就需要乙個團隊的支援,把團隊比作作業系統

核心,把魚竿仍水裡之後就玩手機去了,團隊成員幫你釣魚,釣上來魚之後,告訴你一聲。魚

釣出來了。你看,你接下來執行的任務和釣魚完全是非同步的。這就是非同步i/o

網路IO之IO管理

非同步io asynchronous i o 訊號驅動io signal driven i o 其他記錄在零聲學院所學的點點滴滴,方便後續檢視。歡迎提出問題!相互 客戶端連線伺服器所產生的fd 當多個客戶端連線在伺服器時,如何判斷哪個有資料。傳統做法 1 開多執行緒 缺點 fd 做的不多 2 whi...

網路IO控制

zlan6002 概述 zlan6002主要為rs485進行遠端數字量 模擬量的輸入輸出設計的。裝置相容modbus rtu協議,可以和組態軟體 plc等無縫連線。4路繼電器具有5a ac250v dc30v特性,可以驅動大電流裝置 4路di數字量輸入可以為幹接點或者溼節點 2路ai輸入可以為電流量...

網路IO 十八

route解析過程 1.獲取請求的url,2.根據請求方式獲取路由,3.在根據請求位址匹配相應的路由,並返回action,4.判斷執行的方法的型別 閉包 控制器 5.執行閉包 執行控制器 載入配置檔案 1.sa ir 根據指定目錄讀取目錄下面的檔案 2.獲取檔名稱 3.根據檔名稱讀取檔案資訊 多埠監...