IO多路復(fù)用技術(shù)應(yīng)用場景:
1莱预、服務(wù)器需要同時(shí)處理多個(gè)處于監(jiān)聽狀態(tài)或多個(gè)連接狀態(tài)的套接字
2丙猬、服務(wù)器需要處理多個(gè)網(wǎng)絡(luò)協(xié)議的套接字
UNIX編程提供了5種IO模型
1涨颜、阻塞IO
2、非阻塞IO
3茧球、異步IO
4庭瑰、I/O復(fù)用模型
linux提供了select/poll,select/poll順序掃描fd是否處于就緒狀態(tài)抢埋,而且支持的fd的個(gè)數(shù)有限弹灭。linux還提供了epoll操作,使用基于事件驅(qū)動(dòng)的方式代替了順序掃描羹令,且fd的個(gè)數(shù)不受限制鲤屡,因此性能更高。當(dāng)fd就緒時(shí)福侈,會(huì)立即回調(diào)函數(shù)rollback酒来。
5、信號(hào)驅(qū)動(dòng)IO
epoll總結(jié)
1肪凛、支持一個(gè)進(jìn)程打開的socket描述符(fd)不受限制(僅受限于操作系統(tǒng)的最大文件句柄數(shù))
2堰汉、I/O效率不會(huì)隨著fd的數(shù)量增加而線性下降
3、使用mmap加速內(nèi)核與用戶空間的消息傳遞
無論是select伟墙、poll還是epoll,都需要內(nèi)核把FD消息通知給用戶空間翘鸭,如何避免不必要的內(nèi)存復(fù)制就顯得很重要了,epoll是通過內(nèi)核和用戶空間 mmap 同一塊內(nèi)存實(shí)現(xiàn)戳葵。
4就乓、epoll的API更加簡單