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

news/2024/7/9 16:49:42 标签: epoll

概论:

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采用的回调的方式,内核检测到就绪的文件描述符时,将触发回调函数,回调函数就会将该文件描述符上对应的事件插入内核就绪事件队列.

 

转载于:https://www.cnblogs.com/sixue/p/3980094.html


http://www.niftyadmin.cn/n/1061472.html

相关文章

Spring框架概述

Spring是最流行的Java企业级应用开发框架,全球数以百万的开发者在使用Spring框架创建高性能、易测试、可重用的代码。 Spring框架的核心特性可以应用于任何Java应用,但扩展的JavaEE平台上可以构建Web应用。Spring框架的目标是通过POJO编程模型&#xff0…

HBase简介(很好的梳理资料)

HBase简介(很好的梳理资料) http://www.tuicool.com/articles/iieIz2 一、 简介 history started by chad walters and jim 2006.11 G release paper on BigTable 2007.2 inital HBase prototype created as Hadoop contrib 2007.10 First useable Hb…

linux gcc 非终端程序,如何使用Linux终端(如python,在gcc或g ++中编译一行C ++代码?...

一个可以在终端中运行python命令示例:>>> 2 35>>>一个人可以在不将其写入文本文件的情况下编译一行代码吗?答案并不是真的像在Python中那样,但是在类似Unix的系统上,您可以使用这里文档在终端中键入文本并将其…

F-basic资源

开发环境 VirtuaNESex.exeFP-BASIC(V3.3).nes 资料 F-basic语言与编程技巧.PDF转载于:https://www.cnblogs.com/liuaqu/articles/6951561.html

Alpha-8

前言 失心疯病源8团队代码管理github站立会议 队名:PMS530雨勤(组长) 今天完成了那些任务 20:00~23:00 代码整合,已形成可用模块,但还需适应场景局部优化代码签入github明天的计划 适应场景进行…

fsck系统修复

linux系统由于异常关机,开机出现问题,需要系统修复,执行 fsck 命令进行修复,之后重启即可! 其他关于fsck方面的请参考: http://wenku.baidu.com/link?url5EAvwPtG-4lKtjw2EolOlIUxd-329k4abA8VQbACRQ6eeXj…

FPGA设计技巧之计数器

近日根据RF系统,本着节约FPGA内部逻辑资源以及引脚优化的角度,根据计数器的特征,记录个人的一些偶得。 1. 时钟分频 在项目中经常会遇到需要时钟分频,除了使用PLL或DLL;有时所需的分频时钟较多,不适宜采用过…

51nod 1312 最大异或和(线性基)

线性gay - - 分析:要求和尽量大,首先可以想到,求完线性基后,记最大异或为Max,对于线性基以外的数,都可以变成Max,剩下的线性无关,变成最小线性基,可以通过异或基中最大的…