| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> select、poll、epoll 区别在哪儿? -> 正文阅读 |
|
[系统运维]select、poll、epoll 区别在哪儿? |
之前的《什么是 IO》中提到了 linux 的系统调用: select 、poll、epoll 都能实现 同步 IO 多路复用, 但是它们之间的区别是什么?哪一个方式性能更好? 带着疑问我们来开始今天的话题. 这些都是系统 Linux 操作系统的系统调用.所以学习的最好方式就是手册,首先看 select. select允许程序监视多个文件描述符, 直到一个或多个文件描述符变为某种 IO 操作的“ready”状态,比如读、写. 一个文件描述符是 ready 状态意味着可读可写, 可读是指数据准备好了,发起 read() 系统调用不会阻塞, 可写是指向该文件描述符发起 write() 系统调用时不会阻塞. 下面看 select 的传参:
nfds: 是指readfds、writefds、exceptfds 三个文件描述符集合的最大值 + 1 readfds: 被监控是否可读的文件描述符集合 writefds: 被监控是否可写的文件描述符集合 exceptfds: 被监控是否会出现异常的文件描述符集合 timeout: 指定了监控文件描述符是否 ready 的时间间隔. 可以看出每做一次 select 操作都要进行文件描述符从用户空间到内核空间的传递! poll
pollfd 的结构体:
nfds 指定 fds 数组的大小, timeout 指定 poll 阻塞的最小 ms . 可以看出每做一次 poll 操作都要进行文件描述符从用户空间到内核空间的传递! epoll和 select、poll 的本质区别是, epoll 是 IO 事件通知的基础设施. linux 2.6 内核后才支持. epoll 实际包含三个基本调用:
epoll 的两种模式: 1. edge-triggered(ET)调用 epoll_wait 时, 只有在所监听的 fd 发生变化时,才返回事件,比如数据可读时会发出一个 EPOLLIN 事件, read 操作如果一次没有读完,再调用 epoll_wait 并不会返回事件;同样地, fd 可以写数据时,会翻出一个 EPOLLOUT 事件,但是如果数据一次性没有写完,再发生?epoll_wait调用并不会返回事件. 所以使用 ET 模式时, read 和 write 操作时,必须返回 EAGAIN 时再进行 epoll_wait 操作.
?Level-triggered(LT)socket接收缓冲区不为空 ,有数据可读时,读事件一直触发, socket发送缓冲区不满, 可以继续写入数据,写事件一直触发. LT 模式更符合编程习惯, epoll_wait 返回状态就代表 socket 文件描述符的状态,LT 模式下的 epoll 就是一个快速版本的 poll,使用起来更简单不容易出现bug. nginx 的高并发就是基于 epoll ET 模式实现的. 总结1. select、poll、epoll 都可以实现阻塞 IO 多路复用 2.?select、poll 都需要从用户空间到内核空间传递 fd 数组,因此如果fd 较多的话,肯定会影响性能. 3. epoll 是基于事件通知机制实现多路复用,不用反复传递 fd, 性能较好,能支持较大数量的 fd 监控. |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 2:37:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |