首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >select、epoll、kqueue和evport之间的根本区别是什么?

select、epoll、kqueue和evport之间的根本区别是什么?
EN

Stack Overflow用户
提问于 2014-10-17 08:29:14
回答 1查看 6.6K关注 0票数 16

我最近在读雷迪斯。Redis实现了一个基于I/O复用的简单事件驱动库。Redis说,它将选择系统支持的最佳复用,并给出了以下代码:

代码语言:javascript
复制
/* Include the best multiplexing layer supported by this system.
 * The following should be ordered by performances, descending. */
#ifdef HAVE_EVPORT
#include "ae_evport.c"
#else
    #ifdef HAVE_EPOLL
    #include "ae_epoll.c"
    #else
        #ifdef HAVE_KQUEUE
        #include "ae_kqueue.c"
        #else
        #include "ae_select.c"
        #endif
    #endif
#endif

我想知道他们是否有基本的表现差异?如果是,为什么?

诚挚的问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-17 15:22:21

一般来说,所有异步I/O子系统都有不同的内部结构,但是在当前的具体情况下,这些具体的异步I/O库被用来支持尽可能多的平台。这就是:

  • evport = Solaris 10
  • epoll = Linux
  • kqueue = OS,FreeBSD
  • select =通常安装在所有平台上,作为fallback安装

EvportEpollKQueue具有O(1)描述符选择算法的复杂性,它们都使用内部内核空间存储结构。此外,它们还可以为、lots、(数十万)文件描述符服务。

除其他外,select只能为提供最多1024个描述符,并且对描述符进行全面扫描(因此每次迭代所有描述符以选择一个要处理的描述符时),因此复杂性是O(n)

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26420947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档