机制:数组
select:只支持水平触发(数据不处理完无限通知)函数
epoll:支持水平触发和边缘触发(仅通知一次)进程
单进程监控FD个数事件
select: 由FD_SETSIZE设置,默认值是2048。在大量链接的状况下明显不足。内存
epoll: 和内存有关,1G内存10W个,通常都够用。资源
内核监控事件的策略效率
select: 顺序遍历监控句柄数组,在监控大量链接句柄且数据通讯非活跃状态下效率低下。监控
epoll: 活跃的句柄经过callback函数进行事件自主通知,资源消耗太小;select
程序中获取事件句柄的方式遍历
select: 返回整个监控句柄数组,只能顺序遍历查找里面有事件触发的句柄
epoll: 返回的数组就是全部已经触发事件的句柄。
数据传递
select: 内核态和用户态之间的数据传递须要进行copy
epoll: mmap映射数据空间,免去copy操做