linux高效能伺服器程式設計 九 I O復用

2022-08-03 12:00:16 字數 962 閱讀 9696

第九章 i/o復用

i/o復用就是乙個執行緒可以同時監聽多個檔案描述符,提高程式效能。雖然i/o復用可以同時監聽多個檔案描述符,但是它本身是阻塞的,如果多個檔案描述符準備就緒,如果不採取措施它仍然是序列工作的。所以只能通過多程序或者多執行緒來處理。linux下實現i/o復用主要使用到 select poll epoll 三種都是io多路復用的機制;

select :

1)當有多個i/o流進來了,它不知道哪乙個準備就緒可執行(讀、寫)所以select 只能採用輪詢的方式去訪問,所以 select 的時間複雜度是 o(n) .所以當流越來越多,輪詢的時間就越來越長。

2)select 方案單個程序所監聽的數量是被限制的,也就是說同時可監聽的埠號大小有限。通常情況下監聽的數量和系統記憶體的大小有關,32位機預設監聽大小為1024個,64位機監聽的大小是2048個。

3)採用該方案 還需要維護乙個用來存放大量 fd(檔案描述符)的資料結構,這樣使得使用者空間和核心空間在傳遞該結構時複製開銷比較大。因為它將檔案識別符號陣列被整體從使用者空間和核心位址空間來回拷貝。

poll :

1) poll 本質上和 select 執行方案沒有什麼區別。就是它沒有最大連線數的限制。因為他是基於鍊錶儲存的。複雜度為o(n)

epoll :

1) epoll 可以理解為 event poll 它和 select 和 poll 有很大的不同。 event 會將哪個具體的流i/o事件通知到我們。所以說epoll 實際上是事件驅動 每個事件上都關聯乙個fd (檔案描述符) 。epoll的複雜度是 o(1) 所以說它的效率提公升了很高。

2) epoll 沒有最大併發連線限制,1g的記憶體上能監聽約10萬個埠。

3) 記憶體拷貝,利用mmap()檔案對映記憶體加速與核心空間的訊息傳遞;即epoll使用mmap減少複製開銷。

參考:

linux高效能伺服器程式設計

linux高效能伺服器程式設計 當當網 亞馬遜 目錄 第一章 tcp ip協議族 第二章 ip協議族 第三章 tcp協議詳解 第四章 tcp ip通訊案例 訪問internet 第五章 linux網路程式設計基礎api 第六章 高階io函式 第七章 linux伺服器程式規範 第八章 高效能伺服器框架...

linux 高效能伺服器程式設計

1.高效能定時器 時間輪,時間堆 處理超時時間,如nginx使用紅黑樹,找出最可能超時的事件 2.高效能伺服器程式框架 nginx 使用的是基於事件模型,epoll,不阻塞,非同步處理 兩種高效的事件處理模式 reactor模式 proactor模式 兩種高效的併發模式 半同步 半非同步模式 領導者...

linux高效能伺服器程式設計(1)

linux網路程式設計基礎api 1 socket位址api 2 sockt基礎api sockt的api全部定義在sys socket.h檔案中,包括 建立socket,命名socket,監聽socket,接受連線,發起連線,讀寫資料,獲取位址資訊,檢測帶外標記,以及讀取和設定socket選項。3...