日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IO复用

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IO复用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

同步:發出一個功能調用時,在沒得到結果之前,該調用就不會返回

異步:當一個異步調用發出以后,調用者不會立刻得到結果,實際處理這個調用的部件是在調用發出之后,通過狀態通知調用者。

同步異步他們是消息通知機制

阻塞和非阻塞,他們是程序在等待消息時的狀態。

阻塞:在調用結果返回之前 ,當前線程會被掛起,函數只有在得到結果之后才會返回;

非阻塞:指不能立即得到結果之前,該函數不會阻塞當前線程,而是立即返回。

阻塞I/O模型:

應用程序調用一個IO函數,導致應用程序阻塞,等待數據準備好。 如果數據沒有準備好,一直等待….數據準備好了,從內核拷貝到用戶空間,IO函數返回成功指示。

非阻塞I/O模型

i/O復用模型:

簡介:主要是select和epoll;對一個IO端口,兩次調用,兩次返回,比阻塞IO并沒有什么優越性;關鍵是能實現同時對多個IO端口進行監聽;

/O復用模型會用到select、poll、epoll函數,這幾個函數也會使進程阻塞,但是和阻塞I/O所不同的的,這兩個函數可以同時阻塞多個I/O操作。而且可以同時對多個讀操作,多個寫操作的I/O函數進行檢測,直到有數據可讀或可寫時,才真正調用I/O操作函數。

select模式

首先創建了事件的描述符集合,,對于一個事件,關注其上面的讀事件,寫事件,異常事件,所以要創建三類事件的描述符,分別用來收集事件的描述符,寫事件的描述符,調用select()函數,等待事情發生,然后輪訓所有事件的描述符的每個描述符,檢查是否有事件的發生,如果有就處理,

poll方式

和select方式相同,都是創建一個描述符的集合,再去等待事件的發生,然后再去輪詢描述符的集合,檢查有沒有事件的發生。
區別在于:select庫需要為讀事件,寫事件,異常事件分別創建一個描述符的集合,再最后輪詢的時候需要輪詢三個集合,而poll庫只需要創建一個集合,再每個描述符對應的結構上分別設置讀事件,寫事件,或異常事件,最后輪訓的時候,可以同時檢查這三個事件的是否發生。
他們的處理方式都是創建了一個待處理事件的列表,然后把這個列表發給內核,返回的時候,再去輪詢檢查這個列表,以判斷是否有事情發生,效率低下。
比較好的做法就是把描述符列表的權限交給內核負責,一旦有事情發生,內核會把發生事件的描述符通知給進程,這樣就避免了輪詢整個描述符列表。

epoll方式

通過相關的調用,通知內核創建了一個描述符的列表,然后給這些描述符設置所關注的事件,并把它添加到內核的事件列表中去,完成設置以后,epoll就開始等待內核通知事件了,某一事件發生以后,內核就將發生事件的描述符上報給epoll庫,得知事件列表的epoll庫,就開始進行事件的處理了。
epoll有兩種模式:水平觸發和邊緣觸發
水平觸發:內核通知進程來讀取數據,進程沒來讀取數據,內核需要一次一次通知進程
邊緣觸發:內核只通知一次讓進程來讀取數據,進程可以在超時時間內隨時來讀取數據。

轉載于:https://www.cnblogs.com/hanfei-1005/p/5685118.html

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的IO复用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。