select查库、poll、epoll等系統(tǒng)調(diào)用都是IO多路復(fù)用的操作系統(tǒng)層面的實(shí)現(xiàn)機(jī)制差油。IO多路復(fù)用是一種同步非阻塞的網(wǎng)絡(luò)IO模型估脆,“復(fù)用”是指通過(guò)對(duì)一個(gè)線程的復(fù)用使其能夠同時(shí)監(jiān)視多個(gè)文件描述符,若某個(gè)文件描述符就緒則通知相關(guān)線程進(jìn)行相應(yīng)的讀寫(xiě)操作衰倦。
總的來(lái)說(shuō)袒炉,select和poll的實(shí)現(xiàn)相似,但select/poll的一些固有缺陷導(dǎo)致它的應(yīng)用受到了很大的限制樊零,為了克服select/poll的缺點(diǎn)梳杏,epoll作了很多重大改進(jìn):
- epoll支持一個(gè)進(jìn)程打開(kāi)的socket描述符(FD)不受限制
select/poll最大的缺陷是單個(gè)線程所打開(kāi)的的FD是有一定限制的,默認(rèn)是1024淹接。epoll所支持的FD上限是操作系統(tǒng)的最大文件句柄數(shù),例如叛溢,1G內(nèi)存的機(jī)器上大約是10萬(wàn)個(gè)句柄左右塑悼。
- IO效率不會(huì)隨著FD數(shù)目的增加而線性下降
select/poll的另一個(gè)致命缺陷是每次調(diào)用都會(huì)線性掃描全部的FD集合,導(dǎo)致效率呈現(xiàn)線性下降楷掉。但大多數(shù)時(shí)刻只有少部分的FD是活躍的厢蒜,因此會(huì)造成性能損失。二poll實(shí)現(xiàn)了一個(gè)偽AIO烹植,它只會(huì)針對(duì)活躍的FD進(jìn)行操作斑鸦,通過(guò)每個(gè)FD上面的callback函數(shù)實(shí)現(xiàn)。
每日學(xué)習(xí)筆記草雕,寫(xiě)于2020-05-17 星期日