2019-11-07 |

select&poll&epoll之间有什么区别

A
B
C
D
答案:
  • select本质上是通过设置和轮询fd_set来检查是否有就绪的文件描述符,其缺点在于:

    • 单个进程可监视的文件描述符数量较少,在32位机器上默认为1024个,在64位机器上默认为2048个;
    • 每次调用select都需要把fd_set从用户空间拷贝到内核空间,文件描述符较多时开销较大;
    • 每次调用select都需要线性扫描fd_set,文件描述符较多时开销较大。
  • pollselect相似,不同之处在于poll使用pollfd链表结构保存文件描述符,因此与select相比,没有文件描述符数量的限制。

  • epoll提供了三个函数:

    • epoll_create用于创建一个epoll句柄;
    • epoll_ctl用于注册要监听的事件类型,其特点是:
      • 每次注册新的事件到epoll句柄中时,会把所有的文件描述符拷贝进内核空间,保证了每个文件描述符在整个过程中只拷贝一次,不会出现重复拷贝;
      • 为每个文件描述符指定一个回调函数,当事件发生时,就会调用这个回调函数,把就绪的文件描述符加入到就绪链表中;
    • epoll_wait用于等待事件的发生,唤醒等待中的进程;

    epoll对文件描述符的操作有两种模式:

    • 水平触发:当epoll_wait检测到描述符事件发生并将此事件通知应用程序,应用程序可以不立即处理该事件,下次调用epoll_wait时,将会再次响应应用程序并通知此事件;
    • 边缘触发:当epoll_wait检测到描述符事件发生并将此事件通知应用程序,应用程序必须立即处理该事件,如果不处理,下次调用epoll_wait时,不会再次响应应用程序并通知此事件;

需要注意的是,表面上看epoll的性能最好,但是连接数量较少并且都十分活跃的情况下,selectpoll的性能可能较好,因为epoll的通知机制需要使用回调函数。

解释:

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论