機制:數組
select:只支持水平觸發(數據不處理完無限通知)函數
epoll:支持水平觸發和邊緣觸發(僅通知一次)進程
單進程監控FD個數事件
select: 由FD_SETSIZE設置,默認值是2048。在大量鏈接的狀況下明顯不足。內存
epoll: 和內存有關,1G內存10W個,通常都夠用。資源
內核監控事件的策略效率
select: 順序遍歷監控句柄數組,在監控大量鏈接句柄且數據通訊非活躍狀態下效率低下。監控
epoll: 活躍的句柄經過callback函數進行事件自主通知,資源消耗太小;select
程序中獲取事件句柄的方式遍歷
select: 返回整個監控句柄數組,只能順序遍歷查找裏面有事件觸發的句柄
epoll: 返回的數組就是全部已經觸發事件的句柄。
數據傳遞
select: 內核態和用戶態之間的數據傳遞須要進行copy
epoll: mmap映射數據空間,免去copy操做