select、poll和epoll的区别
select、poll和epoll的区别
今日小编为你讲解select、poll和epoll的区别的IT知识,接下来IT袋网小编为大家介绍。
我们从源码的角度看一下它们实现有哪些区别。
select:客户端操作服务器时会生成三种文件描述符 fd:readfds(读)、writefds(写)和 exceptfds(异常)。
int select(
int maxfd,
fd_set *readset,
fd_set *writeset,
fd_set *exceptset,
struct timeval *timeout
);
返回值:
Ready_fd -> Ready_fd num // 当调用select时,返回就绪的fd数量
Timeout -> 0 // 超时返回0
Error -> -1 // 错误返回-1
当遍历函数 select() 执行时,会阻塞当前线程(老师啥也不做,等着看哪个学生举手了),以监视这 3 类文件描述符,等有数据可读、可写或者产生异常时,就会返回。返回后通过遍历 fdset 整个数组来找到已就绪的 fd,然后进行相应的 IO 操作。
优点:几乎所有的平台都支持;
缺点:
- 单个进程打开的 fd 限制数量为 1024 个(32位机器),可通过宏定义修改,但是效率依旧很慢;
- 每次调用 select() 时,需要把 fd 数据从用户态拷贝到内核态,频繁复制开销很大;
- 轮询方式遍历,会随着套接字 fd 的数量增多,性能下降。且每次都需要全部遍历,浪费CPU 时间,时间复杂度为 O(n)。
poll:基本原理与 select 一致,也是轮询 + 遍历,区别是 poll 中 fd 没有最大数量的限制(使用链表的方式存储 fd)。
int poll (
struct pollfd *fds, // 链表存储
unsigned long nfds,
int timeout
);
返回值:
Ready_fd -> Ready_fd num
Timeout -> 0
Error -> -1
struct pollfd {
int fd; // file descriptor,文件描述符
short events; // events to look for,不变
short revents; // events returned,返回
}
epoll:没有 fd 个数限制,且 fd 集合从用户态到内核态只需要一次,使用时间通知机制来触发。通过 epoll_ctl 注册 fd,一旦 fd 就绪就会通过回调地址来激活对应的 fd,进行相关的 IO 操作。
int epoll_create(int size);
int epoll_ctl (
int epfd,
int op,
int fd,
struct epoll_event *event
);
int epoll_wait (
int epfd,
struct epoll_event *events,
int maxevents,
int timeout
)
typedef union epoll_data {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
}epoll_data_t;
struct epoll_event {
uint32_t events; // epoll events
epoll_data_t data; // user data variable
}
epoll 之所以性能高是得益于它的三个函数:
- epoll_create() 系统启动时,在 Linux 内核里创建 epoll 实例(申请一个红黑树 rbTree 和就绪链表 readyList),以便存放 socket 节点;
- epoll_ctl() 每新建一个连接,都通过该函数操作 epoll 对象,在这个对象的红黑树里增、删、改对应的 socket 节点,绑定一个回调函数;
相关阅读
-
电脑管家和360哪个好 关于电脑管理软件排行榜
一篇关于电脑管家和360哪个好和关于电脑管理软件排行榜的电脑方面的小经验,接下来IT袋带大家一起了解。 360是做安全起家的,说起安全杀毒、系统防护,个人认为360比较专业,防护比较全
-
荣耀x10和红米k40哪个好 手机性能参数对比
全面为您解析荣耀x10和红米k40哪个好和手机性能参数对比的相关知识,具体介绍如下: 手机确实不错,使用了一天,我是买了荣耀X10用了三天,感觉反应慢,再买了real meGT试了一下,当时就退
-
台式游戏电脑配置怎么选 玩游戏台式电脑最佳配置
全面为您解析台式游戏电脑配置怎么选和玩游戏台式电脑最佳配置的介绍,具体内容如下: 经过2022年的游戏混战以及各种跳票之后,2023年的游戏界也将涌现出一批让众多游戏玩家期待值拉满
-
一键安装win10系统哪个好用 电脑系统坏了修复小妙招
如果想知道一键安装win10系统哪个好用和电脑系统坏了修复小妙招的话题,一起来了解了解吧。 电脑作为现在人们日常办公的一项重要工具,经常会涉及到一个问题:重装系统。之所以要重装


