美文网首页python开发
select & epoll的比较

select & epoll的比较

作者: 宝宝家的隔壁老王 | 来源:发表于2018-12-26 16:18 被阅读0次

    select

    • 1、每次调用 select 需要把 fd 集合从用户态拷贝到内核态,这个开销在 fd 很多时会很大
    • 2、每次调用 select 都需要在内核遍历传进来的 fd, 这个开销在 fd 很多时也很大
    • 3、select 支持的文件描述符太少了,默认是 1024

    epoll

    • epoll 提供了三个函数
      • epoll_create:创建句柄,内核在内核态开始准备存储要监控的句柄
      • epoll_ctl:对指定文件描述符进行OP操作
      • epoll_wait:等待事件的产生
    • 1、针对第一个缺点:epoll_ctl 会将 fd 拷贝到内核中 epoll 句柄对应的数据体,epoll 保证了每个 fd 在整个过程中只会拷贝一次,避免了重复拷贝
    • 2、针对第二个缺点:epoll_ctl 会给 fd 注册回调函数,当设备就绪,执行回调函数会把 fd 添加到就绪列链表,epoll_wait 实际上只是从就绪链表中查询是否有就绪的 fd
    • 3、针对第三个缺点:epoll 没有这个限制,他所支持的上限是最大可以打开的文件数目

    相关文章

      网友评论

        本文标题:select & epoll的比较

        本文链接:https://www.haomeiwen.com/subject/lfohlqtx.html