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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

引入了一个IO多路复用模型

發布時間:2024/4/13 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 引入了一个IO多路复用模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們前面講的非阻塞仍然需要進程不斷的輪詢重試。能不能實現當數據可讀了以后給程序一個通知呢?所以這里引入了一個IO多路復用模型,I/O多路復用的本質是通過一種機制(系統內核緩沖I/O數據),讓單個進程可以監視多個文件描述符,一旦某個描述符就緒(一般是讀就緒或寫就緒),能夠通知程序進行相應的讀寫操作?

【什么是fd:在linux中,內核把所有的外部設備都當成是一個文件來操作,對一個文件的讀寫會調用內核提供的系統命令,返回一個fd(文件描述符)。而對于一個socket的讀寫也會有相應的文件描述符,成為socketfd】?

常見的IO多路復用方式有【select、poll、epoll】,都是Linux API提供的IO復用方式,那么接下來重點講一下select、和epoll這兩個模型?

select:進程可以通過把一個或者多個fd傳遞給select系統調用,進程會阻塞在select操作上,這樣select可以幫我們檢測多個fd是否處于就緒狀態。?

這個模式有二個缺點?

1. 由于他能夠同時監聽多個文件描述符,假如說有1000個,這個時候如果其中一個fd 處于就緒狀態了,那么當前進程需要線性輪詢所有的fd,也就是監聽的fd越多,性能開銷越大。?

2. 同時,select在單個進程中能打開的fd是有限制的,默認是1024,對于那些需要支持單機上萬的TCP連接來說確實有點少?

epoll:linux還提供了epoll的系統調用,epoll是基于事件驅動方式來代替順序掃描,因此性能相對來說更高,主要原理是,當被監聽的fd中,有fd就緒時,會告知當前進程具體哪一個fd就緒,那么當前進程只需要去從指定的fd上讀取數據即可?

另外,epoll所能支持的fd上線是操作系統的最大文件句柄,這個數字要遠遠大于1024?

【由于epoll能夠通過事件告知應用進程哪個fd是可讀的,所以我們也稱這種IO為異步非阻塞IO,當然它是偽異步的,因為它還需要去把數據從內核同步復制到用戶空間中,真正的異步非阻塞,應該是數據已經完全準備好了,我只需要從用戶空間讀就行】

?

總結

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

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