三组I/O复用模型的比较

概论:

select、poll和epoll三组I/O复用系统调用,这3组系统调用都能同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间,直到一个或者多个文件描述符上有事件发生时返回.返回值是就绪的文件描述符的数量。返回0表示没有事件发生,超时.

我们从事件集、最大支持文件描述符的数量、工作模式和具体实现等四个方面进一步比较它们的异同.

事件集:

这三个函数都是通过某种结构体变量来告诉内核监听哪些文件描述符上的哪些事件,并使用该结构体类型的参数来获取内核处理的结果。

select模型:参数类型是fd_set,提供3个这样的结构来表示监听三种不同类型的事件可读、可写和异常.这使得select不能监听更多类型的事件。另外一方面由于内核对fd_set的输出结果进行修改,这使得select不得不在再次调用select时必须重置fd_set集合.

poll模型:把文件描述符和事件同时定义在一个结构体pollfd中。任何事件都统一处理,从而使得编程接口更加规范.并且内核每次返回修改的都是pollfd的revents成员,而events成员保持不变,所以下次调用poll不需重置.

但是select和poll的共同缺点:每次两者调用都需要返回整个用户注册的事件集.包括就绪的和未就绪的。这使得必须对整个事件集逐个遍历判断,时间复杂度O(n).

epoll模型采用了与select、poll完全不同的方式来管理用户注册的事件.它在内核中维护一个事件表,并提供一个独立的系统调用epoll_ctl来操作往其中添加、删除、修改事件。同时epoll_wait函数的events参数仅用来返回就绪的事件,这使得直接索引就绪文件描述符的事件复杂度O(1).

文件描述符的数量:

select能够同时监听最大的文件描述符数量是1024个,这使得往往对于大规模用户登录的服务器端明显不足。而poll和epoll相对没有限制,通常能够达到65535.

工作模式:

select、poll模型都只工作在相对低效的LT模式,而epoll可以工作在ET的高效模式.

 实现原理:

select和poll采用的都是轮询的方式,即每次调用都是扫描整个注册的文件描述符集合,并返回其中就绪的文件描述符集。而epoll采用的回调的方式,内核检测到就绪的文件描述符时,将触发回调函数,回调函数就会将该文件描述符上对应的事件插入内核就绪事件队列.

时间: 2024-10-19 09:54:53

三组I/O复用模型的比较的相关文章

epoll函数及三种I/O复用函数的对比

epoll函数 #include <sys/epoll.h>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) Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数

COMET探索系列二【Ajax轮询复用模型】

COMET探索系列二[Ajax轮询复用模型] 写在前面:Ajax轮询相信大家都信手拈来在用,可是有这么一个问题,如果一个网站中同时有好多个地方需要用到这种轮询呢?就拿我们网站来说,有一个未读消息数提醒.还有一个时实时加载最新说说.昨天又加了一个全网喊话,以后还会要有类似功能添加是肯定的,难道要为每个功能都创建一个独立的轮询?要知道轮询请求中有大半是无用,会对服务器资源和宽带造成巨大的浪费.因此在页面中每增加一个轮询点,对服务器的压力及宽带浪费都将成倍的增长.再考虑一个情况,如果当前网页中需要的不

I/O复用模型详解

一.httpd工作模型 prefork:进程模型,两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求 worker:线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程相应一个请求 event:线程模型,三级结构,主进程master负责生成子进程,每个子进程响应多个请求 二.I/O模型名词概念 同步/异步:关注的是消息通信机制 同步:synchronous,调用者等待被调用者返回信息,才能继续执行异步:asynchronous,被调用者通

评论第三组

团队博客每天发布站立会议信息(配站立会议照片).任务进度.任务看板(图).燃尽图(图).个人博客发表每天个人工作总结昨天干了什么:今天准备干什么:遇到困难没有: 检查第三组:发布站立会议信息(配站立会议照片).任务进度.任务看板(图).燃尽图(图).都已完成要求.只是连续发表七天 组员:张学晴,个人冲刺10天,发表完全,表明任务,进行总结,表明困难 牛俊燕:个人冲刺7天,发表完全,表明任务,进行总结,表明困难 谷伟华:个人冲刺10天,发表完全,表明任务,进行总结,表明困难 尤凯莉:个人冲刺10天

CSS 设计彻底研究(三)深入理解盒子模型

第三章 深入理解盒子模型 盒子模型是CSS控制页面的基础.需要清楚“盒子”的含义是什么,以及盒子的组成.此外,应该理解DOM的基本概念,以及DOM树是如何与一个HTML文档对应的,在此基础上充分理解“标准流”的概念. 3.1 盒子的内部结构 padding-border-margin模型是一个极其通用的描述矩形对象布局形式的方法.这些矩形对象被统称为”盒子“,英文为”Box“. 模型 就是对某种事物的本质特性的抽象. 在CSS中,一个独立的盒子模型由content(内容).border(边框).

飞谷云六期第三组——基于Spark的机器学习

项目正式开始时间:2015.10.15. 随笔内容:本次项目的主题是基于Spark的ML.对于ML的学习有大概半年了,正好在网上关注到了由上海交通大学所主办的这个飞谷云的大数据项目,我所报名的这期已经是飞谷云的第六期了,在网上和群里了解了一段时间后大算报名参与一次,毕竟之前没有参与过真正的项目开发,也刚好趁着在学习ML的这个时间通过项目把理论和实践都加强.在这篇随笔中,我打算把这次项目的每个过程都写进来,一是为了给正在进行的项目提供一个全程记录:二是给自己一个留念,毕竟是自己独立完成的一个ML方

PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第三组

七:终端风险管理-必选但包含可选步骤异常文件:终端检查应用主账号是否在异常文件列表(卡号黑名单)中.商户强制联机:商户可以将当前交易强制为联机处理.最低限额:控制交易当前交易金额或同一张卡片连续几笔交易累积金额超过某个数值时则要求联机授权.随机交易选择:控制交易基于当前交易的金额随机决定交易是否联机授权.(可选支持)频度检查:要求卡片在连续脱机交易一定次数后要求进行一次联机交易.新卡检查:判断卡片是否为初次使用. 6个 [终端必须具备风险管理功能,但其中的检查项是可以选择的.终端通过终端和卡片提

Qt 3D研究(三):显示3D模型

Qt 3D研究(三):显示3D模型 上一篇文章介绍了如何使用最少的代码创建一个Qt 3D的应用.和大家最初接触的glut一样,对于3D应用来说,需要做的准备工作还真不少,不过呢,Qt 3D把一些窗口相关的琐碎事情解决了,剩下的,该由我们完成重要的渲染部分了,可以说,带来了某种程度的方便. 蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/43964499.欢迎同行前来探讨. 我们接下来要使用Qt 3D将一个模型显示出来.Qt 3

将1、2、3、……、81这八十一个连续自然数分成三组,使每组的和相等。三组中个数最多的一组有几个?

1 <script type="text/javascript"> 2 window.onload = function() { 3 var n =81; 4 // 求组数 5 var zushu = Math.floor(n / 2); 6 var sum = (1 + 81) * (zushu) + (zushu + 1) * (n % 2); 7 console.log("总和为:" + sum); 8 var avg = sum / 3; 9 c