Select与Epoll的区别】的更多相关文章

1.select 和epoll模型区别 1.1.网络IO模型概述 通常来说,网络IO可以抽象成用户态和内核态之间的数据交换.一次网络数据读取操作(read),可以拆分成两个步骤:1)网卡驱动等待数据准备好(内核态)2)将数据从内核空间拷贝到进程空间(用户态).根据这两个步骤处理方式不一样,我们通常把网络IO划分成阻塞IO和非阻塞IO. ·阻塞IO.用户调用网络IO相关的系统调用时(例如read),如果此时内核网卡还没有读取到网络数据,那么本次系统调用将会一直阻塞,直到对端系统发送的数据到达为止.…
先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法 一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解决方案有以下几种: 1.使用多进程或者多线程,但是这种方法会造成程序的复杂,而且对与进程与线程的创建维护也需要很多的开销.(Apache服务器是用的子进程的方式,优点可以隔离用户) 2.用一个进程,但是使用非阻塞的I…
先讲讲同步I/O的五大模型 阻塞式I/O, 非阻塞式I/O, I/O复用,信号驱动I/O(SIGIO),异步I/O模型 而select/poll/epoll属于I/O复用模型 select函数 该函数允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或经历一段指定的时间后才能唤醒它 #include <sys/select.h> #include <sys/time.h> int select(int maxfdp1, fd_set *readset, fd_…
select和epoll都用于监听套接口描述字上是否有事件发生,实现I/O复用 select(轮询) #include <sys/select.h> #include <sys/time.h> int select (int maxfdpl, fd_set* readset, fd_set* writeset, fd_set* exceptset, const struct timeval* timeout) 调用时轮询一次所有描述字,超时时再轮询一次.如果没有描述字准备好,则返回…
先了解一些基本概念,什么是socket?什么是I/O操作 unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切都是文件,一切都是流 在信息交换的过程中,我们都是对这些流进行数据的收发操作,简称为I/O操作(input and output) 计算机里有这么多的流,我怎么知道要操作哪个流呢?对,就是文件描述符,即通常所说的fd,一个fd就是一个整数,所以,对这个整数的操作,就是对这个文件(流)的操作.我们创建…
select 优点:为最早的异步io处理模块,他可以再linux上和windows上使用,跨平台兼容性好,而poll和epoll都不能在windows系统环境中使用. 缺点:select的机制决定了他每次循环需要对所有input中的链接进行检测,看连接的状态是怎么样的.他的开销会随并发数的增大而线性增大.且他的最大检测数为1024(可以修改). poll:他的机制和select相同,所以也造成了并发的数量越多,他的开销越大,且不能在windows下面使用.但是他没有检测的最大限制 epoll:采…
目录 第一个解决方案(多线程) 第二个解决方案(select) 第三个解决方案(poll) 最终解决方案(epoll) 客栈遇到的问题 从开始学习编程后,我就想开一个 Hello World 餐厅,由于一开始资金不足,所以只能开一个古老的小客栈. 客栈运营了几天,我发现我们的客栈存在着一个问题 我们的厨师只负责炒菜,炒好了放在一边继续炒其他菜,所以店小二必须经常进出厨房,一方面看看菜到底炒好了没有,如果炒好的话,就要把菜端出来,另一方面他必须得站在外面等候客人的其他需求.并且重要的是只有一个小二…
  相同点: 都是IO多路转接,都是一个线程能同一时间等待一堆描述符 不同点: 1.select接口使用不方便,每次调用完select都需要重新设置fd_set,因为输入输出未分离,返回的fd_set会将未就绪的fd清空;   epoll接口使用方便,采用事件结构方式监控,简化了对多个监控结合的操作 , 输入输出也进行了分离,不需要再重新设置fd_set; #include<sys/select.h> //select执行过程: //在fd_set中添加要监控的fd-->调用select…
关于select与epoll的区别,网上的文章已是一大堆.不过别人的终究是别人的,总得自己去理解才更深刻.于是在阅读了大量的文章后,再装模作样的看下源码,写下了自己的一些理解. 在开始之前,要明白linux中分用户空间.内核空间,这相当于两块不能直接相互访问的内存.而用户程序要访问设备,包括网络.读写文件,都需要调用内核的相关函数.而调用内核相关函数,则往往需要从用户空间往内核拷贝一些数据,反之亦然.当调用非常频繁,这个拷贝的消耗也是不能忽略的.具体请参考:http://www.kerneltr…
面试题:说说select/poll/epoll的区别. 这是面试后台开发时的高频面试题,属于网络编程和IO那一块的知识.Android里面的Handler消息处理机制的底层实现就用到了epoll. 为此,我在Google上看了很多相关文章,才大概搞懂是怎么一回事. 背景知识 文件描述符fd 文件描述符(File descriptor)是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念. 文件描述符在形式上是一个非负整数.实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打…