與多執行緒和多程序相比,i/o多路復用的最大優勢是系統開銷小,系統不需要建立新的程序或者執行緒,也不必維護這些執行緒和程序。
主要應用:
(1)客戶程式需要同時處理互動式的輸入和伺服器之間的網路連線
(2)客戶端需要對多個網路連線作出反應
(3)tcp伺服器需要同時處理多個處於監聽狀態和多個連線狀態的套接字
(4)伺服器需要處理多個網路協議的套接字
(5)伺服器需要同時處理不同的網路服務和協議
select()函式
readfds:select()函式監視的可讀描述符集合
wtitefds:select()函式監視的可寫描述符集合
errnofds:select()函式監視的異常描述符集合
timeout:select()函式監視超時結束時間,取null表示永久等待
timeout告知核心等待所指定描述字中的任何乙個就緒可花多少時間。其timeval結構用於指定這段時間的秒數和微秒數。
struct timeval;
fd_zero(fd_set *fdset):清空fdset與所有描述符的關係
fd_set(int fd, d_set * fdset):建立描述符fd與fdset得關係
fd_clr(int fd, d_set * fdset):撤銷描述符fd與fdset得關係
fd_isset(int fd, d_set * fdset):檢查與fdset聯絡的描述符fd是否可以讀寫,返回非零表示可以讀寫
select()函式實現io多路復用的步驟
(1)清空描述符集合
(2)建立需要監視的描述符與描述符集合的關係
(3)呼叫select函式
(4)檢查監視的描述符判斷是否已經準備好
(5)對已經準備好的描述符程序io操作
《網路程式設計》I O 多路復用
在前面的文章中介紹了五種 i o 模型 i o 模型 這裡介紹 i o 模型中 i o 多路復用在 tcp 套接字程式設計中的使用。在 i o 多路復用中主要是 select 和 poll 函式的使用。該函式允許程序指示核心等待多個事件中的任何乙個發生,並只在乙個或多個事件發生或超過指定時間後才被喚...
Socket linux網路多路復用IO技術
1.mystery引入 select是一種多路復用io輸入輸出模式,在linux的輸入輸出程式設計中通過select的輪詢機制,發現可用 可讀或可寫的介面。低階socket程式中有乙個共同點 都是基於阻塞式的程式設計方式 非阻塞式是函式呼叫時不阻塞,不管函式執行成功與否,都會立即返回。優點 程式效率...
Socket linux網路多路復用IO技術
1.mystery引入 select是一種多路復用io輸入輸出模式,在linux的輸入輸出程式設計中通過select的輪詢機制,發現可用 可讀或可寫的介面。低階socket程式中有乙個共同點 都是基於阻塞式的程式設計方式 非阻塞式是函式呼叫時不阻塞,不管函式執行成功與否,都會立即返回。優點 程式效率...