高并发网络模型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

  线程池

 

posted @ 2020-06-29 22:09  dhakdg  阅读(363)  评论(0)    收藏  举报