select,poll,epoll比较
除常用文件i/o外,其他常用io模型:
io多路复用(select和poll系统调用)
信号驱动I/O
linux专有的epoll编程接口
异步io(aio),linux在glibc中提供有基于线程的 posix aio实现。
大部分程序使用的i/o模型都是单个进程每次只在一个文件描述符上执行i/o操作,每次i/o系统调用都会阻塞直到完成数据传输。
对于很多应用来说,传统的阻塞式i/o模型就足够,但不是所有应用都可以满足。
如果在打开文件时设定了O_NONBLOCK标志,会以非组赛方式打开文件.如果i/o系统调用不能立刻完成,则会返回错误而不是阻塞进程,非阻塞i/o可以运用到管道、fifo,套接字,中断,为终端以及其他一些类型的设备上。
i/o多路复用允许进程同时检查多个文件描述符以找出他们中的任何一个是否可执行i/o操作,系统调用select和poll用来执行i/o多路复用。
信号驱动i/o当有输入或者数据可以写到指定的文件描述符时,内核向请求数据的进程发送一个信号。
epoll api出现在linux2.6版以后.
select()对于被检查的文件描述符有一个上限限制FD_SETSIZE,在linux下默认1024.
每次调用select和poll,内核都必须检查所有被指定的文件描述符。看他们是否处于就绪态。
每次调用select和poll.程序都必须传递一个表示所有被检查的文件描述符的数据结构到内核,内核检查过描述符后,修改这个数据结构并返回给应用程序。
select和poll调用完成后,程序必须检查哪个文件描述符必须就绪。
select和poll只支持水平触发
epoll api的核心数据结构称作epoll实例,它和一个打开的文件描述符相关联,这个文件描述符不是做i/o操作的,相反,他是内核数据结构的句柄。
epoll_create创建一个epoll实例时,内核在内存中创建一个新的i-node并打开文件描述,随后为进程中打开这个文件描述分配一个文件描述符。
内核数据结构,主要目的就是记录在进程中声明过的感兴趣的文件描述符列表和处于i/o就绪态的文件描述符列表。和兴趣列表管理是文件描述而不是文件描述符。
epoll_wait调用的目的就是让内核负责监视打开的文件描述.
文件描述表示的是一个打开文件的上下文信息(大小、内容等和文件有关的信息),可以比喻为抽屉。由内核管理。
内核分配给用户空间来一个文件描述符,可以操作文件描述的内容,比喻为抽屉的把手.一个文件描述多个文件描述符。
max_user_watches用来定义每个用户可以注册到epoll实例上的文件描述符总数。
epoll水平和边缘都支持。
水平触发通知:如果文件描述符上可以非阻塞的执行i/o系统调用,此时认为已经就绪。
边缘触发通知:如果文件描述符自上次状态检查以来有了新的i/o活动,此时需要触发通知。
边缘触发会出现文件描述符饥饿现象。
select,poll,epoll比较的更多相关文章
- select/poll/epoll on serial port
In this article, I will use three asynchronous conferencing--select, poll and epoll on serial port t ...
- Linux下select&poll&epoll的实现原理(一)
最近简单看了一把 linux-3.10.25 kernel中select/poll/epoll这个几个IO事件检测API的实现.此处做一些记录.其基本的原理是相同的,流程如下 先依次调用fd对应的st ...
- Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
一.进程: 1.语法 2.进程间通讯 3.进程池 二.Gevent协程 三.Select\Poll\Epoll异步IO与事件驱动 一.进程: 1.语法 简单的启动线程语法 def run(name): ...
- 多进程、协程、事件驱动及select poll epoll
目录 -多线程使用场景 -多进程 --简单的一个多进程例子 --进程间数据的交互实现方法 ---通过Queues和Pipe可以实现进程间数据的传递,但是不能实现数据的共享 ---Queues ---P ...
- Python自动化 【第十篇】:Python进阶-多进程/协程/事件驱动与Select\Poll\Epoll异步IO
本节内容: 多进程 协程 事件驱动与Select\Poll\Epoll异步IO 1. 多进程 启动多个进程 进程中启进程 父进程与子进程 进程间通信 不同进程间内存是不共享的,要想实现两个进程间 ...
- select,poll,epoll的归纳总结区分
Select.Poll与Epoll比较 以下资料都是来自网上搜集整理.引用源详见文章末尾. 1 Select.Poll与Epoll简介 Select select本质上是通过设置或者检查存放fd标志位 ...
- 转一贴,今天实在写累了,也看累了--【Python异步非阻塞IO多路复用Select/Poll/Epoll使用】
下面这篇,原理理解了, 再结合 这一周来的心得体会,整个框架就差不多了... http://www.haiyun.me/archives/1056.html 有许多封装好的异步非阻塞IO多路复用框架, ...
- select.poll,epoll的区别与应用
先讲讲同步I/O的五大模型 阻塞式I/O, 非阻塞式I/O, I/O复用,信号驱动I/O(SIGIO),异步I/O模型 而select/poll/epoll属于I/O复用模型 select函数 该函数 ...
- select poll epoll三者之间的比较
一.概述 说到Linux下的IO复用,系统提供了三个系统调用,分别是select poll epoll.那么这三者之间有什么不同呢,什么时候使用三个之间的其中一个呢? 下面,我将从系统调用原型来分析其 ...
- select, poll, epoll
select的一 个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024 http://www.cnblogs.com/bigwangdi/p/3182958.html ...
随机推荐
- Objective-C 工厂方法
类方法用来创建对象的方法就是工厂方法 1.无参工厂方法 创建对象,并给属性一个默认值. //无参工厂方法实现 +(Student*)student{ return [[Student alloc]in ...
- MyEclipse使用心得:集成和使用Maven的方法
MyEclipse下载:http://www.myeclipsecn.com/download/ 第一步:下载和安装 1.官网下载Maven:http://maven.apache.org/downl ...
- Linux0.11内核--加载可执行二进制文件之2.change_ldt
前面分析完了copy_strings函数,这里来分析另一个注意的函数change_ldt. 先来看调用处: // 根据a_text 修改局部表中描述符基址和段限长,并将参数和环境空间页面放置在数据段末 ...
- elasticsearch GIS空间查询问题解决
在GIS行业的应用越来越广泛,GIS最常用根据区域进行空间数据查询 我定义了两个方法,一起来看一下: /** * geodistance filter * 一个过滤器来过滤基于一个特定的距离从 ...
- FMDB基本使用
1.打开数据库 #import "ViewController.h" #import "FMDB.h" @interface ViewController () ...
- CSS3-01 简介
概述 HTML 文档由包含 HTML 标签的 HTML 元素组成,HTML 标签被用于定义文档的内容.HTML 文档内容没有额外的样式,以纯文本流的方式渲染到浏览器页面.需要借助层叠样式表(CSS)来 ...
- CocoaPods 导入第三方库头文件自动补齐
使用了一段时间CocoaPods来管理Objective-c的类库,方便了不少.但是有一个小问题,当我在xcode输入import关键字的时候,没有自动联想补齐代码的功能,需要手工敲全了文件名,难以适 ...
- mac osx get postgresql path
sudo lsof -i :5433 ps xuwww -p 91 sudo port install py27-psycopg2
- 敏捷遇上UML——软创基地马年大会(深圳站 2014-3-15)
邀请函: 尊敬的阁下: 我们将在深圳为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战 ...
- .NET 4.5 中新提供的压缩类
Windows8 的开发已经如火如荼开始了,在 Windows8 中提供的 .NET Framework 已经更新到了 4.5 版,其中又增加了一些新的特性,对压缩文件的支持就是其中之一. 在 4.5 ...