首頁(yè)技術(shù)文章正文

什么是IO多路復(fù)用?

更新時(shí)間:2023-05-30 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

是利用單個(gè)線程來(lái)同時(shí)監(jiān)聽(tīng)多個(gè)Socket,并在某個(gè)Socket可讀、可寫時(shí)得到通知,從而避免無(wú)效的等待,充分利用CPU資源。

階段一:

①用戶進(jìn)程調(diào)用select,指定要監(jiān)聽(tīng)的Socket集合

②內(nèi)核監(jiān)聽(tīng)對(duì)應(yīng)的多個(gè)socket

③任意一個(gè)或多個(gè)socket數(shù)據(jù)就緒則返回readable

④此過(guò)程中用戶進(jìn)程阻塞

階段二:

⑤用戶進(jìn)程找到就緒的socket

⑥依次調(diào)用recvfrom讀取數(shù)據(jù)

⑦內(nèi)核將數(shù)據(jù)拷貝到用戶空間

⑧用戶進(jìn)程處理數(shù)據(jù)

1685442517541_131.png

IO多路復(fù)用是利用單個(gè)線程來(lái)同時(shí)監(jiān)聽(tīng)多個(gè)Socket,并在某個(gè)Socket可讀、可寫時(shí)得到通知,從而避免無(wú)效的等待,充分利用CPU資源。不過(guò)監(jiān)聽(tīng)Socket的方式、通知的方式又有多種實(shí)現(xiàn),常見(jiàn)的有select、poll、epoll。

差異:select和poll只會(huì)通知用戶進(jìn)程有Socket就緒,但不確定具體是哪個(gè)Socket,需要用戶進(jìn)程逐個(gè)遍歷Socket來(lái)確認(rèn)。epoll則會(huì)在通知用戶進(jìn)程Socket就緒的同時(shí),把已就緒的Socket寫入用戶空間。

1685442623281_132.png

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!