当前位置:网站首页>select/poll/epoll的区别
select/poll/epoll的区别
2022-07-15 16:48:00 【幽萌之雨】
1.用户态将文件描述符传入内核的方式
select:创建3个文件描述符集并拷贝到内核中,分别监听读、写、异常动作。这里受到单个进程可以打开的fd数量限制,默认是1024个。
poll:将传入的struct pollfd结构体数组拷贝到内核中进行监听。
epoll:执行epoll_create会在内核的高速cache区建立一棵红黑树以及就绪链表(该链表只存储已经就绪的文件描述符)。接着用户执行epoll_ctl函数添加文件描述符会在红黑树上增加相应的节点。
2.内核态检测文件描述符读写状态的方式
select:采用轮询方式,遍历所有fd,最后返回一个描述符读写操作就绪的mask掩码,根据这个掩码给fd_set赋值。
poll:同样采用轮询方式,查询每个fd的状态,如果就绪则在等待队列中加入一项并继续遍历。
epoll:采用回调机制,内核在检测某文件描述符可读/可写时会调用回调函数,该回调函数将文件描述符放在就绪链表中。
3.找到就绪文件描述符并传递给用户态的方式
select:将之前传入的fd_set拷贝传出到用户态并返回就绪的文件描述符总数。用户态并不知道是哪些文件描述符处于就绪态,需要遍历来判断。
poll:将之前传入的fd数组拷贝传出用户态并返回就绪的文件描述符总数。用户态并不知道哪些文件描述符处于就绪态,需要遍历来判断。
epoll:epoll_wait只用观察就绪链表中有无数据即可,最后将链表的数据返回给数组并返回就绪的数量。内核将就绪的文件描述符放在传入的数组中,所以只需要遍历就绪的就好,不需要遍历全部的。这里返回的文件描述符是通过mmap()让内核和用户空间同享一块内存实现传递的,减少了不必要的拷贝。
4.重复监听的方式
select:将新的监听文件描述符集合拷贝传入内核中,并继续以上步骤。
poll:将新的struct pollfd结构体数组传入内核中,继续以上步骤。
epoll:无需重新构建红黑树,直接沿用已存在的即可。
5.epll更高效的原因:
select和poll的动作基本一致,只是poll采用链表来进行文件描述符的存储,而select采用fd标注位来存放,所以select会受到最大连接数的限制,而poll不会。
select、poll、epoll虽然都会返回就绪的文件描述符数量,但是select和poll不会明确指出是哪些文件描述符就绪,而epoll会。造成的区别就是,系统调用返回后,调用select和poll的程序需要遍历监听的整个文件描述符找到是谁处于就绪,而epoll则是直接处理即可。
select、poll都需要将有关的文件描述符的数据结构拷贝进内核,最后再拷贝出来。而epoll创建的有关文件描述符的数据结构本身就存于内核态中,系统调用返回时利用mmap()文件映射内存加速与内核空间的消息传递:即epoll使用mmap减少复制开销。
select、poll采用轮询的方式来检查文件描述符是否处于就绪态,而epoll采用回调机制。造成的结果就是,随着fd的增加,select、poll的效率会线性降低,而epoll不会受到太大的影响,除非活跃的socket很多。
epoll的边缘触发模式效率高,系统不会充斥着大量不关心的就绪文件描述符,虽然epoll的性能最好,但是在连接数少并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通体制机制需要很多函数回调。
边栏推荐
- Huawei cloud stack opens its framework to the south to help ecological partners enter the cloud efficiently
- 60 year old developer's suggestion, try to change it!
- Timesformer: can you understand video by transformer alone? Another attack of attention mechanism
- 9. MySQL -- JDBC入门
- 指尖轮盘小游戏设计与实现(uniapp实现微信小程序)
- Drive free USB to serial port billboard chip (ldr2001)
- The game console type-C scheme supports data transmission while charging
- 机器学习最重要的一张图,如何选择模型 sklearn结构图
- freeswitch的话单模块
- 数组模拟链表
猜你喜欢

【面试必刷101】双指针

Chapter 7 preprocessing of C language

How Oracle escapes single quotation marks

国产之光!高分时空表征学习模型 UniFormer

Swin transformer, the best paper model of iccv 2021, finally started video

08目标检测数据集半自动化标注

Yotact structure diagram

Drive free USB to serial port billboard chip (ldr2001)

What is base?

PD QC leurre application IC ledry ldr6328s est largement utilisé dans les appareils ménagers de toutes tailles
随机推荐
Ffmpeg audio and video transfer package (MP4 and flv are transferred to each other, and streaming data is transferred to FLV and MP4)
The IP address of the database is stored. What data type is used
08目标检测数据集半自动化标注
FFmpeg sample 分析:muxing.c
TCP 三次握手、四次挥手图解
Explanation of smart factory terms
Type-C application OTG function while charging and transferring data (ldr6028s)
Type-c边充边传数据应用OTG功能(LDR6028S)
YOLOv3训练数据处理解析
业务发展陷入停滞,决策没有信息支撑,数据分析才是解决方案
IDEA类文档注释模板设置
markdown学习笔记 第二章 基本语法 (markdown编辑器下显示)
Resnet50 structure diagram
[CQOI2012]局部极小值 & Mike and Foam
MySQL-索引
WM8960声卡相关问题
如何使用OpenCV保存.mp4格式文件
Compileflow Taobao workflow engine
数组和字符串赋值的问题(定义时不初始化)
Private cloud ranking of Tangmen concealed weapons