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. 为 ...
随机推荐
- centos gcc 新版本安装的一种方法
最近出来一个v 语言,打算试用下,但是需要编译,centos 7 gcc 版本太低,一种可选的解决方法 使用Software Collections Software Collections 安装方法 ...
- edgedb 开发环境运行
以下是一篇来自官方的edgedb 开发环境搭建说明,实际上我以前自己也摸索过一个,基本方法一样,一些是官方的做一个 简单的记录 预备工具 GNU make version 3.80 or newer; ...
- 移动端tap事件(轻击、轻触)
一.问题 ①移动端也有click点击事件,click点击会延迟200~300ms ②因为点击的响应过慢,影响了用户体验,所以需要解决响应慢的问题 二.解决方案 ①使用tap事件:即轻击,轻敲,响应速度 ...
- ImageView.ScaleType
前言 对ImageView.ScaleType,学习安卓需掌握.以官方链接:http://android.xsoftlab.net/reference/android/widget/ImageView ...
- Hyperspectral Image Classification Using Similarity Measurements-Based Deep Recurrent Neural Networks
用RNN来做像素分类,输入是一系列相近的像素,长度人为指定为l,相近是利用像素相似度或是范围相似度得到的,计算个欧氏距离或是SAM. 数据是两个高光谱数据 1.Pavia University,Ref ...
- mysql ,limit 的使用
//offset参数指定要返回的第一行的偏移量.第一行的偏移量为0,第二行的偏移量为1.count指定要返回的最大行数.LIMIT offset,count; mysql> select * f ...
- Tkinter 之爬虫框架项目实战
一.效果图 二.源码 ''' 测试内容页爬取''' def test_content_url(self): try: url = self.test_url_var.get().strip() ite ...
- spring boot后端使用fastjson,错误代码415, 500
$.post({ url: "/register", dataType: "json", contentType: "application/json ...
- 第10组Alpha冲刺(1/4)
队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 学习Android studio和Java,基本了解APP前端的制作 完善项目APP原型 展示GitHu ...
- Docker for mac开启docker api调用
docker-java 支持unix socket调用的 DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefa ...