网站大量收购闲置独家精品文档,联系QQ:2885784924

浅析Linux IO技术体系课件.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅析 Linux IO技术体系 1 基本概念 IO操作是程序设计里的一个重头戏 ,尤其是 Linux中 ,管道、网络等设备都看成了文件描述符 ,因此IO对于Linux程序设计更加重 要。近年来 ,随着Nginx、lighttpd等新型高性能web服务器的广泛使用 ,其内部采用的epoll、异步IO等IO模型逐渐走入了人们的视野。 本文将探究Linux各个IO模型的来龙去脉、基于原理与相互之间的联系 ,并进行IO效率与性能的简要分析 ,解决人们对于Linux IO众多概 念、模型的理解混乱与误解 ,理顺出一个清晰的技术体系。 介绍Linux IO模型之前 ,需要先介绍两个对于论述IO模型非常重要的概念。 1.1 阻塞IO与非阻塞IO 所谓IO的阻塞与非阻塞 ,是指当进行IO操作时 ,需要的资源不可用 ,这时程序的表现。阻塞IO将让程序处于等待状态 ,指导需要的资源可 用 ;而非阻塞IO将直接返回 ,不等需要的资源可用。 比如通过read函数从一个网络socket中读取数据 ,对于阻塞IO来说 ,如果网络中没有数据 ,则read函数将一直阻塞直到有数据可 用 ,程序阻塞期间CPU将把时间片调度给其他进程 ;如果处于非阻塞IO模式 ,read函数将直接返回一个错误码 ,不会等待。 Linux支持将文件描述符设置为NOBOLCK支持IO的非阻塞模式。 1.2 同步IO与异步IO IO的同步异步与IO的阻塞非阻塞这两种概念很容易混淆 ,实际上这两种概念的定义并不相似。同步IO是指发出IO操作后 ,后面的操 作不能进行 ,要么等待IO操作完成 ,要么放弃IO操作 ,总之后面的操作和当前的IO操作只能有一个 进行 ;异步IO是指发出IO操作后 ,马 上返回而继续执行后面的操作 ,而IO操作也 此时刻执行。 从以上的概念可以看出 ,同步与异步、阻塞与非阻塞这两种概念关注点不同 ,没有半毛钱关系。实现IO和其他任务的异步操作并难 , 开启两个线程 ,一个进行IO操作 ,另一个线程继续进行后面的任务处理就行了 ,至于进行IO操作的线程既可以使用阻塞IO ,也可以使用非 阻塞IO。 而同步IO就更简单了 ,一般单个线程下的普通阻塞IO或者非阻塞IO都是同步的 ,因为IO操作和其他任务无法同时进行 ,要么想阻 塞IO那样 ,一直等待进行IO操作而不管后面的任务操作 ,要么想非阻塞IO那样 资源不可用时不管IO操作 ,直接 返回 ,进行后面的业务 操作。 需要指出的是 ,本文介绍的异步IO并不是采用多线程或者多进程那样简单的实现 ,而是 单线程内实现IO操作和其他任务的异步执 行 ,这需要Linux操作系统内核的支持 ,而且效率更高。 2 Linux IO模型分析 2.1 普通阻塞IO (普通青年 选择 ) 普通阻塞IO是最基础最简单 ,也是使用最广泛的一种IO编程模型 ,菜鸟程序员 提高之前必须熟练掌握。 这种编程模型的详细流程如下图所示 ,各种IO操作 ,比如socket accept、read、write等 , 资源不可用时 , 此模型下都处于等待 状态 ,让出CPU资源给其他进程。 利用普通阻塞IO模型实现对多个文件描述符进行IO操作时 ,或者实现异步操作时 ,只能使用多线程方式 ,从而增加了线程切换方面 的开销 , 后面对各个IO模型性能的分析中将详细比较多线程阻塞IO和多路IO复用的性能差异。 2.2 普通非阻塞IO (2B青年 选择 ) 普通非阻塞IO模型与阻塞模型的区别只是当IO操作遇到资源不可用时 ,非阻塞IO不会等待 ,而直接返回。普通非阻塞IO模型是实现 多路复用技术和异步IO技术的重要基础 ,但是单独使用非阻塞IO则是一种效率极低的行为。比如当进行read操作时没有可读数据 ,因为不 等待直接返回 ,所以不得不自己编写while循环 ,一遍遍的进行非阻塞的read操作 ,也就是轮询。这时程序一直处 运行状态 ,因此不会 让出CPU ,但是轮询实际上是一种无用功 ,最终的结果就是CPU都用 了无谓的轮询上了 ,造成CPU占用量高 ,但是IO吞吐量却不会超过 普通阻塞IO编程。 普通非阻塞IO模型的时序流程如下图所示 : 正如上图显示的轮询过程

文档评论(0)

xiaofei2001129 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档