Min*_* Fu 4 unix epoll kqueue multiplexing redis
我最近在读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
Run Code Online (Sandbox Code Playgroud)
我想知道他们是否有基本的性能差异?如果是这样,为什么?
最好的祝福
通常,所有异步I/O子系统都具有不同的内部结构,但在当前特定情况下,这些具体的异步I/O库用于支持尽可能多的平台.那是:
fallbackEvport,Epoll并且KQueue具有O(1)描述符选择算法的复杂性,并且它们都使用内部内核空间存储器结构.他们也可以提供大量(数十万)个文件描述符.
除了其他之外,select最多只能提供1024个描述符,并对描述符进行全面扫描(因此每次迭代所有描述符以选择一个使用时),因此复杂度为O(n).
| 归档时间: |
|
| 查看次数: |
1628 次 |
| 最近记录: |