高并发网络模型select、epoll和iocp的区别
select:
跨平台(windows和linux都支持)
每次都要从用户空间拷贝到内核空间
遍历整个fd_set,O(n)
最大可监听的fd数量不能超过FD_SETSIZE
select用轮训查询哪些文件可读,哪些不可读,如果需要轮询的数量非常大,可能会非常慢(例如10万个链接)
poll
操作和select非常类似,无FD_SETSIZE的限制,在此不做分析
epoll:
select每次都需要从用户控件拷贝到内核控件,但epoll只拷贝一次,用共享内存mmap方法解决
内部采用红黑树存储,无需遍历整个fd_set
不需要全部复制,返回双向链表
windows不支持
LT(水平触发)事件没有处理,可以一直通知
ET(边缘触发)只通知一次,每当状态变化就触发一个事件
iocp
windows
线程池

浙公网安备 33010602011771号