IT入门 > 面试题 > Linux题库 > I/O模型 >

IT入门 > 面试题 > Linux题库 > I/O模型 >

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

  你会看到这个提示,那是因为你的系统无法识别某栏目的模型信息,或者你新建模型后,没为这个模型设计单独的模板。不同模型的文档浏览页的模板为:article_模型名字标识.htm 如“article_article.htm”,更多的信息你可以在频道模型管理的地方查看。
附加标题 内容:
模板调用标记:
题型:1单选,2多选,3填空,4问答,5排序 内容:
模板调用标记:
4
选项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的通知机制需要使用回调函数。

难度:1入门级,2初级,3中级,4高级 内容:
模板调用标记:
1
专业分类 内容:
模板调用标记:
(责任编辑:zengmumu)
    广告位API接口通信错误,查看德得广告获取帮助