Select与Epoll的区别
相同点: 都是IO多路转接,都是一个线程能同一时间等待一堆描述符
不同点:
1.select接口使用不方便,每次调用完select都需要重新设置fd_set,因为输入输出未分离,返回的fd_set会将未就绪的fd清空;
epoll接口使用方便,采用事件结构方式监控,简化了对多个监控结合的操作 , 输入输出也进行了分离,不需要再重新设置fd_set;
#include<sys/select.h> //select执行过程:
//在fd_set中添加要监控的fd-->调用select等待-->fd_set返回已就绪fd,未就绪的被清空 int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
//nfds为最大fd_set+1,减少遍历区间
//fd_set是存储要监控fd的位图,大小是系统设定的,系统提供了一套操作fd_set的增删改查的接口
//timeout == NULL阻塞 >=0等待时间
//epoll执行过程:
//epoll_careate在内核创建eventpoll结构体,其中包含红黑树与双向链表--->
//为需要监控的fd创建一个事件结构并用epoll_ctl添加到红黑树中-->
//调用epoll_wait等待,当有fd就绪操作系统就会调用对应的回调函数将就绪的事件结构添加到双向链表中(红黑树中的就绪fd的事件类型会清空,下次遍历需要重新设置事件类型)-->
//epoll_wait每隔一段时间判断双向链表是否为空,如果不为空就将就绪的事件结构映射到用户传
//入的事件数组中 -->
//函数返回后,用户可以直接对返回的事件数组遍历操作 //创建eventpoll结构体
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);
2.select每次监控都需要在用户态与内核态之间频繁拷贝数据; epoll只需要将监控的事件向内核拷贝一次,不需要频繁拷贝。
3.select监控的fd越多效率越低,因为内核要在内部遍历位图;epoll采用事件回调方式监控(谁就绪回调谁),因此效率不会因为fd增多而降低。
4.select没有直接返回就绪的文件描述符,需要用户对集合进行遍历判断;epoll直接返回的就绪事件结构,用户可以直接操作,不需要空遍历;
5.select监控的fd有限,默认是1024个;epoll监控的fd没有上限。
6.select可以跨平台;epoll不可以跨平台。
事件结构(epoll_event):
\
这里提一下poll:
相比于select: 1.接口使用更方便,采用事件结构数组进行所有事件监控,简化了三种集合操作
2.监控的fd没有上限
除了这两个优点,缺点和select一样。
Select与Epoll的区别的更多相关文章
- select 和epoll模型区别
1.select 和epoll模型区别 1.1.网络IO模型概述 通常来说,网络IO可以抽象成用户态和内核态之间的数据交换.一次网络数据读取操作(read),可以拆分成两个步骤:1)网卡驱动等待数据准 ...
- 多路复用select和epoll的区别(转)
先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法 一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一 ...
- select.poll,epoll的区别与应用
先讲讲同步I/O的五大模型 阻塞式I/O, 非阻塞式I/O, I/O复用,信号驱动I/O(SIGIO),异步I/O模型 而select/poll/epoll属于I/O复用模型 select函数 该函数 ...
- UNIX环境高级编程——select和epoll的区别
select和epoll都用于监听套接口描述字上是否有事件发生,实现I/O复用 select(轮询) #include <sys/select.h> #include <sys/ti ...
- bio,nio,aio的区别 select,poll,epoll的区别
先了解一些基本概念,什么是socket?什么是I/O操作 unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切 ...
- python select poll epoll的区别
select 优点:为最早的异步io处理模块,他可以再linux上和windows上使用,跨平台兼容性好,而poll和epoll都不能在windows系统环境中使用. 缺点:select的机制决定了他 ...
- 最快理解 - IO多路复用:select / poll / epoll 的区别.
目录 第一个解决方案(多线程) 第二个解决方案(select) 第三个解决方案(poll) 最终解决方案(epoll) 客栈遇到的问题 从开始学习编程后,我就想开一个 Hello World 餐厅,由 ...
- select与epoll分析
关于select与epoll的区别,网上的文章已是一大堆.不过别人的终究是别人的,总得自己去理解才更深刻.于是在阅读了大量的文章后,再装模作样的看下源码,写下了自己的一些理解. 在开始之前,要明白li ...
- 转--select/poll/epoll到底是什么一回事
面试题:说说select/poll/epoll的区别. 这是面试后台开发时的高频面试题,属于网络编程和IO那一块的知识.Android里面的Handler消息处理机制的底层实现就用到了epoll. 为 ...
随机推荐
- 搭建的一套vue打包方案,方便记录一下
package.json 配置如下: { "name": "rise-vue", "version": "1.0.0", ...
- “知乎杯”2018 CCF 大学生计算机系统与程序设计竞赛 绝地求生(battleground)
/* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-ts ...
- linux命令之------Chown命令
Chown命令 1) 作用:将指定文件的拥有者改为指定的用户或组. 2) -c:显示更改的部分的信息. 3)-f:忽略错误信息. 4)-h:修复符号链接. 5)-v:显示详细的处理信息. 6)-R:处 ...
- C博客作业--我的第一篇博客作业
1你对网络专业或计算机专业了解是怎样的 由于从小就与电脑打交道,对于各类软件的生产非常感兴趣,所以在高三开学查询有什么专业的时候,就打算报与计算机有关的专业.我对计算机专业感到非常神奇,毕竟只是看似简 ...
- uni-app 模拟器
1.安装MuMu模拟器 Android模拟器端口: 7555 2.安装夜神模拟器 Android模拟器端口: 62001
- 【整理】Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得
[整理]Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得 iOS模拟器简介 iOS功能简介 iOS模拟器,是在Mac下面开发程序时,开发iOS平台的程序时候,可以使用的辅助工具 ...
- 服务器收不到支付宝notify_url异步回调请求的问题排查
小背景 最近在调整支付宝支付的功能时发现,不能够正常接收支付宝付款成功之后的回调通知了,从代码到配置最后到服务器配置都排查了一遍,最终发现问题原因竟然是因为我们的回调地址notify_url是http ...
- 作业——12 hadoop大作业
作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 Hadoop综合大作业 1.以下是爬虫大作业产生的csv文件 ...
- JSP的工作原理
jsp的本质就是一个servlet,jsp在第一次被访问时会被Web容器翻译成servlet index.jsp -> index_jsp.java -> 编译成index_jsp.cla ...
- 动态BGP与静态BGP
在阿里云上选择ECS的时候,发现有动态BGP和静态BGP区分,静态的要便宜些,搜了下区别如下: 静态BGP路由是指由网络运营商手动配置的路由信息.当网络的拓扑结构或链路的状态发生变化时,运营商需要手动 ...