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 ...
随机推荐
- easyui框架对tab的限制提示
使用easyui框架如果页面打开太多可能导致页面加载缓慢的问题,下面我们看看代码怎么写: var $tab = $('#tabs'); var tabCount = $tab.tabs('tabs') ...
- JavaScript异步编程(1)- ECMAScript 6的Promise对象
JavaScript的Callback机制深入人心.而ECMAScript的世界同样充斥的各种异步操作(异步IO.setTimeout等).异步和Callback的搭载很容易就衍生"回调金字 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q112-Q115)
Question 112 You are designing a public-facing SharePoint 2010 Web site for an elementary school th ...
- 【Swift】UITableViewCell 中 TTTAttributedLabel 超链接无法点击的问题
前言 还以为是自己代码写的有问题,用法和别的地方都一样,但是这个是在 UITableViewCell 中使用,另外在 tableHeaderView 中使用也没用这个问题 —— 使用 TTTAttri ...
- #研发解决方案介绍#Tracing(鹰眼)
郑昀 最后更新于2014/11/12 关键词:GoogleDapper.分布式跟踪.鹰眼.Tracing.HBase.HDFS. 本文档适用人员:研发 分布式系统为什么需要 Tracing? ...
- regsvr32命令
regsvr32是Windows操作系统命令,用来注册及反注册DLL文件和ActiveX文件. 1. 使用示例 regsvr32 foo.dll // 注册foo.dll文件到Windows ...
- 【转】Hadoop FS Shell命令
FS Shell 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args> 的形式. 所有的的FS shell命令使用URI路径作为参数.URI格式是scheme ...
- readonly
readonly 关键字是可以在字段上使用的修饰符. 当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中. 示例 在此示例 ...
- Red Hat Enterprise Linux 各个版本以及发布日期
Red Hat Enterprise Linux 7 Release/Update General Availability Date redhat-release Errata Date* Kern ...
- [转载]java之yield(),sleep(),wait()区别详解
原文地址:http://dylanxu.iteye.com/blog/1322066 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁 ...