IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。

比如你打开浏览器,访问新浪首页,浏览器这个程序就需要通过网络IO获取新浪的网页。浏览器首先会发送数据给新浪服务器,告诉它我想要首页的HTML,这个动作是往外发数据,叫Output,随后新浪服务器把网页发过来,这个动作是从外面接收数据,叫Input。所以,通常,程序完成IO操作会有Input和Output两个数据流。当然也有只用一个的情况,比如,从磁盘读取文件到内存,就只有Input操作,反过来,把数据写到磁盘文件里,就只是一个Output操作。

IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动。Input Stream就是数据从外面(磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。对于浏览网页来说,浏览器和新浪服务器之间至少需要建立两根水管,才可以既能发数据,又能收数据。

由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。举个例子来说,比如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这100M数据可能需要10秒,怎么办呢?有两种办法:

第一种是CPU等着,也就是程序暂停执行后续代码,等100M的数据在10秒后写入磁盘,再接着往下执行,这种模式称为同步IO;

另一种方法是CPU不等待,只是告诉磁盘,“您老慢慢写,不着急,我接着干别的事去了”,于是,后续代码可以立刻接着执行,这种模式称为异步IO。

同步和异步的区别就在于是否等待IO执行的结果。好比你去麦当劳点餐,你说“来个汉堡”,服务员告诉你,对不起,汉堡要现做,需要等5分钟,于是你站在收银台前面等了5分钟,拿到汉堡再去逛商场,这是同步IO。

你说“来个汉堡”,服务员告诉你,汉堡需要等5分钟,你可以先去逛商场,等做好了,我们再通知你,这样你可以立刻去干别的事情(逛商场),这是异步IO。

很明显,使用异步IO来编写程序性能会远远高于同步IO,但是异步IO的缺点是编程模型复杂。想想看,你得知道什么时候通知你“汉堡做好了”,而通知你的方法也各不相同。如果是服务员跑过来找到你,这是回调模式,如果服务员发短信通知你,你就得不停地检查手机,这是轮询模式。总之,异步IO的复杂度远远高于同步IO。

操作IO的能力都是由操作系统提供的,每一种编程语言都会把操作系统提供的低级C接口封装起来方便使用

最新文章

  1. mysql数据库2013_MySQL数据库备份(2)2013-6-13
  2. C++里的花括号{},块,作用域
  3. 流量管理系统产品选型常见问答(FAQ)
  4. 清掉数据_大数据超详尽分析,带你看懂打野江湖
  5. android上传字符串到服务器,【图片】【转】通过Android 客户端上传数据到服务器【aide吧】_百度贴吧...
  6. Open3d之自定义可视化
  7. app集成极光推送笔记(angular js)
  8. 十大排序算法——桶排序(C语言)
  9. ami编码设计流程图_AMI码型变换实验 - 图文 -
  10. CCIE培训分解实验内容
  11. java游戏俄罗斯方块_Java俄罗斯方块小游戏
  12. Lecture05:随机市场出清
  13. html json是什么文件,JSON是什么?
  14. 基于SpringBoot的简历管理系统
  15. 1-乙基-3-甲基咪唑醋酸盐([EMIM][Ac]);甲基三辛基醋酸铵[N(1,8,8,8)][Ac]齐岳离子液体
  16. TLS协议分析 (九) 现代加密通信协议设计
  17. 学无止境的CSS(xHTML+CSS技巧教程资源大全)
  18. plupload文件上传插件使用
  19. (转)完美解决 Android WebView 文本框获取焦点后自动放大有关问题
  20. php删除到回收站代码,如何找回回收站删除的文件PHP,删除文件与文件夹操作

热门文章

  1. 再见,区块链 Rio会议和以太坊Sao Paolo活动。 你好,闪光时刻
  2. Deque接口实现栈功能
  3. 小米2s 白色电信版 线刷教程亲身经历
  4. 积分球测试软件无法创建新文档,积分球测试中的问题解答
  5. 任务管理器”内存列的含义
  6. Mac 键盘与鼠标的映射
  7. 最囧游戏2攻略计算机,最囧游戏我kao攻略大全图文详解
  8. 湛江的python黑马培训机构
  9. WIN10,耳机一直是单声道无法显示环绕立体声
  10. 补题:HNU暑期训练第二场L-Skeletons