当前位置: 首页 > 面试题库 >

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

纪俊良
2023-03-14
问题内容

我最近在读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具有 O(1) 描述符选择算法的复杂性,并且它们都使用内部内核空间内存结构。他们还可以提供
大量 (数十万个)文件描述符。

除其他外,select最多只能服务 1024个
描述符,并且对描述符进行完全扫描(因此,每次迭代所有描述符以选择一个要使用的描述符),因此复杂度为 O(n)



 类似资料:
  • java nio select的代码和linux epoll的代码看起来是一样的。没有循环来获取套接字fd,linux选择代码片段确实使用循环来获取套接字fd。 所以我的问题是,java nio select和linux epoll的方式相同吗? java nio选择 linux e轮询 linux选择

  • 本文向大家介绍Windows和Linux之间的根本区别是什么?,包括了Windows和Linux之间的根本区别是什么?的使用技巧和注意事项,需要的朋友参考一下 视窗 窗口操作系统是磁盘操作系统的扩展。 Windows是最流行,最简单的操作系统,任何可以阅读和理解基本英语的人都可以使用Windows,因为它不需要任何特殊培训。 它要求DOS最初运行各种应用程序。因此,应该将DOS安装到内存中,然后才

  • 问题内容: 当您使用 BeautifulSoup 抓取网站的特定部分时,您可以使用 和或 。 和方法之间有区别吗?(例如,性能或灵活性等)还是相同? 问题答案: 总结评论: select 查找多个实例并返回一个列表, find 查找第一个实例,因此它们不会执行相同的操作。 select_one 将等同于 find 。 我链接时,标签或使用几乎总是使用CSS选择 tag.classname ,如果寻

  • 问题内容: 我最近从“高级”开发人员/同事那里得到了一些关于C#垃圾收集器的非常错误的建议,例如… “在C#中,您需要在所有地方使用析构函数,因为不能依赖垃圾收集器。” “不能将C#垃圾收集器视为Java垃圾收集器”。 就我所知,这听起来非常可疑,据我所知,C#和Java垃圾收集器之间的区别如下… C#是分代垃圾收集器,Java是1.6中的并发标记清除,而G1是具有Java 7的新的默认(分代)垃

  • 问题内容: 事件驱动和异步通常用作同义词。两者之间有什么区别吗? 另外,和之间有什么区别?它们如何配合在一起? 最后,我读过很多遍了,Linux中的AIO被严重破坏了。它到底有多坏? 谢谢。 问题答案: 事件是实现异步执行的范例之一。但是,并非所有异步系统都使用事件。那是关于这两个的语义含义-一个是另一个的超实体。 epoll和aio使用不同的隐喻: epoll是一个阻塞操作()-阻塞线程直到发生

  • 这是一个例子:代码A: 另一个代码B可以这样使用: 两者有什么区别,有和没有?