gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:00:40 26 4
gpt4 key购买 nike

最近在看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
  • select = 通常作为fallback
  • 安装在 所有平台上

EvportEpollKQueue的描述符选择算法复杂度为O(1),它们都是使用内部内核空间内存结构。它们还可以提供很多(数十万个)文件描述符。

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

关于unix - select、epoll、kqueue 和 evport 之间的根本区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26420947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com