後端開發核心技術 第7章網路IO模型 poll

2021-10-06 12:06:31 字數 1161 閱讀 1708

#include

intpoll

(struct pollfd* fds,

unsigned

int nfds,

int timeout)

;(1)fds:指向乙個結構體陣列的第0個元素的指標,每個陣列元素都是乙個struct pollfd結構,用於指定測試某個給定的fd的條件

(2)nfds:表示fds結構體陣列的長度

(3)timeout:表示poll函式的超時時間,單位是毫秒

函式功能:

監視並等待多個檔案描述符的屬性變化

函式返回值:

(1)返回值小於0,表示出錯

(2)返回值等於0,表示poll函式等待超時

(3)返回值大於0,表示poll由於監聽的檔案描述符就緒返回,並且返回結果就是就緒的檔案描述符的個數。

pollfd結構定義如下

struct pollfd

;

(1)fd:每乙個 pollfd 結構體指定了乙個被監視的檔案描述符,可以傳遞多個結構體,指示 poll() 監視多個檔案描述符。

(2)events:表示要告訴作業系統需要監測fd的事件(輸入、輸出、錯誤),每乙個事件有多個取值

(3)revents:revents 域是檔案描述符的操作結果事件,核心在呼叫返回時設定這個域。events 域中請求的任何事件都可能在 revents 域中返回。

每個結構體的 events 域是由使用者來設定,告訴核心我們關注的是什麼,而 revents 域是返回時核心設定的,以說明對該描述符發生了什麼事件

通過poll函式的結構以及小測試程式的編寫,我們不難發現poll函式的一些特點:

(1)poll() 不要求開發者計算最大檔案描述符加一的大小。

(2)poll() 在應付大數目的檔案描述符的時候速度更快,相比於select。

(3)它沒有最大連線數的限制,原因是它是基於鍊錶來儲存的。

(4)在呼叫函式時,只需要對引數進行一次設定就好了

(1)大量的fd的陣列被整體複製於使用者態和核心位址空間之間,而不管這樣的複製是不是有意義。

(2)與select一樣,poll返回後,需要輪詢pollfd來獲取就緒的描述符,這樣會使效能下降

(3)同時連線的大量客戶端在一時刻可能只有很少的就緒狀態,因此隨著監視的描述符數量的增長,其效率也會線性下降

後端開發核心技術 第5章除錯 strace

所有作業系統在其核心都有一些內建的函式,這些函式可以用來完成一些系統級別的功能,這些函式被稱為系統呼叫,這些函式代表了使用者空間到核心空間的一種轉換 例如使用者空間呼叫open函式,在核心空間中則會呼叫sys open。系統呼叫並不直接返回錯誤碼,而是將錯誤碼放入到乙個名為errno的全域性變數中。...

後端開發核心技術 第8章 網路分析工具 lsof

lsof list open files 是乙個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。所以如傳輸控制協議 tcp 和使用者資料報協議 udp 套接字等,系統在後台都為該應用程式分配了乙個檔案描述符,無論這...

後端開發核心技術 第4章編譯 靜態鏈結和動態連線

add.h ifndef add h define add h intadd int a,int b endif add.cpp include add.h intadd int a,int b sub.h ifndef sub h define sub h intsub int a,int b e...