除常用文件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比较的更多相关文章

  1. select/poll/epoll on serial port

    In this article, I will use three asynchronous conferencing--select, poll and epoll on serial port t ...

  2. Linux下select&poll&epoll的实现原理(一)

    最近简单看了一把 linux-3.10.25 kernel中select/poll/epoll这个几个IO事件检测API的实现.此处做一些记录.其基本的原理是相同的,流程如下 先依次调用fd对应的st ...

  3. Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)

    一.进程: 1.语法 2.进程间通讯 3.进程池 二.Gevent协程 三.Select\Poll\Epoll异步IO与事件驱动 一.进程: 1.语法 简单的启动线程语法 def run(name): ...

  4. 多进程、协程、事件驱动及select poll epoll

    目录 -多线程使用场景 -多进程 --简单的一个多进程例子 --进程间数据的交互实现方法 ---通过Queues和Pipe可以实现进程间数据的传递,但是不能实现数据的共享 ---Queues ---P ...

  5. Python自动化 【第十篇】:Python进阶-多进程/协程/事件驱动与Select\Poll\Epoll异步IO

    本节内容: 多进程 协程 事件驱动与Select\Poll\Epoll异步IO   1.  多进程 启动多个进程 进程中启进程 父进程与子进程 进程间通信 不同进程间内存是不共享的,要想实现两个进程间 ...

  6. select,poll,epoll的归纳总结区分

    Select.Poll与Epoll比较 以下资料都是来自网上搜集整理.引用源详见文章末尾. 1 Select.Poll与Epoll简介 Select select本质上是通过设置或者检查存放fd标志位 ...

  7. 转一贴,今天实在写累了,也看累了--【Python异步非阻塞IO多路复用Select/Poll/Epoll使用】

    下面这篇,原理理解了, 再结合 这一周来的心得体会,整个框架就差不多了... http://www.haiyun.me/archives/1056.html 有许多封装好的异步非阻塞IO多路复用框架, ...

  8. select.poll,epoll的区别与应用

    先讲讲同步I/O的五大模型 阻塞式I/O, 非阻塞式I/O, I/O复用,信号驱动I/O(SIGIO),异步I/O模型 而select/poll/epoll属于I/O复用模型 select函数 该函数 ...

  9. select poll epoll三者之间的比较

    一.概述 说到Linux下的IO复用,系统提供了三个系统调用,分别是select poll epoll.那么这三者之间有什么不同呢,什么时候使用三个之间的其中一个呢? 下面,我将从系统调用原型来分析其 ...

  10. select, poll, epoll

    select的一 个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024 http://www.cnblogs.com/bigwangdi/p/3182958.html ...

随机推荐

  1. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(三)显示地图坐标系模块

    config.xml文件的配置如下: <widget left="3" bottom="3" config="widgets/Coordinat ...

  2. Dynamics XRM Tools 2015 2016

    Download Link: Dynamics XRM Tools 2015/2016 Overview Dynamics XRM Tools brings you a quality range o ...

  3. View and Data API tips: 缓存Access Token

    对于云API服务,常见的方式就是按照API调用次数收费,某些API调用也就有某些限制,比如在特定时间内只允许调用指定的次数以免造成滥用.虽然Autodesk的view and Data API目前还没 ...

  4. iOS多线程之6.GCD的其他用法

    队列组   让队列里的任务同时执行,当任务都执行完毕时,再以通知的形式告诉程序员.举例,同时下载两张图片,两张图片都下载完了,在合成成一张. 代码: #import "ViewControl ...

  5. 生成的API分析文件太大。我们无法在交付前验证您的API使用信息。这只是通知信息。

    这次使用了APICloud平台来开发移动APP, 发布的时候在api控制台云编译成ipa后,这次使用apple提供的Application Loader工具提交apa文件到iTunes上去,提交结束的 ...

  6. iOS---友盟推送遇到的坑

    生产证书无效  很有可能  是你的证书上传的不对 开发证书  对应我们测试环境的推送P12文件 生产证书   对应我们线上环境的推送P12文件 device Token  无效  有可能是你的证书不对 ...

  7. Linux LVM学习总结——删除物理卷

    本篇介绍LVM管理中的命令vgreduce, pvremove.其实前面几篇中以及有所涉及. vgreduce:通过删除LVM卷组中的物理卷来减少卷组容量.注意:不能删除LVM卷组中剩余的最后一个物理 ...

  8. Mysql zip包在Windows上安装配置

    环境:Windows7 64位系统.mysql-5.7.16-winx64.zip 1.在mysql官网上下载所需的mysql zip包,如我下载的是mysql-5.7.16-winx64.zip: ...

  9. WinRAR的命令行模式用法介绍

    因工作中要对数据打包,顺便研究了下WinRAR的命令行模式,自己写了些例子,基本用法如下: 测试压缩文件准备:文件夹test_data,内部包含子文件夹,分别存放了一些*.log和*.txt文件. 测 ...

  10. maven核心,pom.xml详解(转)

    什么是pom?    pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的u ...