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.根據檔名稱讀取檔案資訊 多埠監...