select模型
优点
select遵循的是posix标准,可以跨平台移植select的超时时间可以精确到微秒 缺点
select采用的是轮询遍历,监控效率会随着文件描述符的增多而下降select所监控的文件描述符最大为1024,取决于内核_FD_SETSIZE宏的值select监控文件描述符时会把事件集合拷贝到内核中,select发现有事件集合就绪后,会从内核中拷贝到用户空间,这样一来会降低效率select在返回的时候,会把未就绪的文件描述符从集合中去除掉,导致下一次监控时,如果还需要监控去除掉的文件描述符时,则需要重新去添加select没有直接告诉程序员哪一个文件描述符就绪了,需要程序员在返回事件描述符时去判断
poll模型
优点
poll不限制文件描述符个数poll采用了事件结构,这样大大简化了编码的复杂度poll不需要在二次监控时重新添加文件描述符 缺点
poll采用轮询遍历事件结构数组方式,随着文件描述符个数增加,性能会下降poll不支持跨平台poll也没有告诉用户哪一个具体的文件描述符就绪了,需要程序员进行遍历去判断poll也需要将就虚的事件结构拷贝到内核再拷贝到用户空间
epoll模型
优点
epoll采用的是红黑树,监控效率高
目前公认的在Linux中监控性能最高的是epoll