美文网首页
多路复用select poll epoll函数

多路复用select poll epoll函数

作者: holmes000 | 来源:发表于2020-04-06 18:54 被阅读0次

    笔记
    设计一个线程处理多个任务

    一.select实现源码


    image.png

    1.画线上半部分主要是获取文件描述集合fds,最大文件描述符max

    2.reset是bitmap主要描述那个文件是启用的,最大1024个,1的需要监听


    image.png

    3.select会将reset拷贝在内核态


    image.png

    没数据会阻塞,有数据: 1会将fd置位(即标记)2 selecr返回

    4.最后遍历找到被置位的FD_ISSET,读取并处理。

    缺点:1.bitmap最多1024
    2.fdset不可重用,因为置位
    3.拷贝用户态到内核态仍有开销
    4.再次遍历需要O(n)

    二.poll源码实现


    image.png

    原理差不多
    区别在于
    有数据:
    1.置位是修改revents
    2.poll返回
    解决:
    1.最多1024个
    2.fds不可重用
    缺点:
    1.拷贝用户态到内核态仍有开销
    2.再次遍历需要O(n)

    三.epoll源码实现


    image.png

    有数据:
    1.置位 (通过重排)将有数据的fd放在前面
    2.返回 有返回值 比如3就是有3个触发事件
    所以使用的时候就可以有效遍历(O(1))
    再读取处理
    epoll_ctl 事件
    epoll_wait 事件回调
    解决:
    1.拷贝用户态到内核态仍有开销
    2.再次遍历需要O(n)
    redis nginx nio 底层都是epoll

    相关文章

      网友评论

          本文标题:多路复用select poll epoll函数

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