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

我最近在读Redis。Redis基于I / O复用实现了一个简单的事件驱动库。Redis表示将选择系统支持的最佳多路复用,并提供以下代码:

/* 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

我想知道它们是否存在根本的性能差异?如果是这样,为什么?

最好的祝福

回答:

通常,所有异步I / O子系统都有不同的内部结构,但是在当前特定情况下,这些具体的异步I / O库用于支持尽可能多的平台。那是:

  • evport = Solaris 10
  • epoll = Linux
  • kqueue = OS X,FreeBSD
  • 选择 =通常安装在 平台上的fallback

Evport,,EpollKQueue具有 描述符选择算法的复杂性,并且它们都使用内部内核空间内存结构。他们还可以提供

(数十万个)文件描述符。

除其他外,select最多只能服务

描述符,并且对描述符进行完全扫描(因此,每次迭代所有描述符以选择一个要使用的描述符),因此复杂度为 。

以上是 select,epoll,kqueue和evport之间的根本区别是什么? 的全部内容, 来源链接: utcz.com/qa/433147.html

回到顶部