当前位置: 首页 > ds >正文

IO编程

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接口封装起来方便使用,Python也不例外。我们后面会详细讨论Python的IO编程接口。
注意,本章的IO编程都是同步模式,异步IO由于复杂度太高,后续涉及到服务器端程序开发时我们再讨论。
http://www.xdnf.cn/news/11222.html

相关文章:

  • 新手也能轻松上手!网页布局设计的10个黄金法则
  • 用EP9315构建基于嵌入式Linux的NAS系统平台
  • 启动应用程序出现olepro32.dll找不到问题解决
  • 女人的度
  • AMDIN01
  • MovieClip,Sprite,Shape三者之间的区别
  • 【Java实例-神秘年龄】用Java挑战你的直觉
  • AVI、 MPEG 、 DivX、 Indeo Video 常见的编码与常见的文件格式
  • 从扫码登录的原理分析QQ大量被盗事件
  • 中兴v880刷机全过程。原创亲测
  • [ZT]Grub4dos for WinPE 启动菜单
  • Mswrd632.wpc转换器启动失败问题解决
  • 妄撮小游戏的开发思想-Android开发资料-《妄撮(撕开美女衣服)》游戏源代码外传...
  • 《西游降魔篇》[BD-RMVB.720p.国语中字][2013年奇幻冒险喜剧]
  • seo优化 博客篇
  • 丝路英雄批量辅助更新记录
  • JSON解析类库之Gson(5) --- TypeAdapter性能分析
  • 超级转霸注册码
  • cesium添加动态扩散圆,动态圆环
  • 历届美国梦之队战斗力汇总:梦一无敌 梦十二平淡
  • 13个免费资源网站,你想要的全都有!【各类宝藏资源,建议收藏】
  • [02-14] 绿色免费软件更新
  • 炉石传说掉线/掉线频繁/老是掉线?3招教你解决掉线问题
  • DETR代码学习(五)之匈牙利匹配
  • 零基础程序员如何自学编程?用这6种方法就够了!
  • 世界上最恐怖的格斗比赛---黑市拳赛
  • 视频去水印免软件下载-视频去水印哪个软件好用
  • 【区块链】以太坊源码学习 -- EVM
  • dkp管理系统 php,RB!DKP v3.1.8 Build
  • p2p协议