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由于复杂度太高,后续涉及到服务器端程序开发时我们再讨论。

python程序官方网站-IO编程相关推荐

  1. Python自学笔记D9——IO编程、进程、线程和正则表达式

    文章目录 IO编程 文件读写 StringIO和BytesIO 操作文件和目录 序列化 进程和线程 多进程 多线程 ThreadLocal 多进程和多线程对比 分布式进程 正则表达式 IO编程 由于程 ...

  2. Python学习笔记十 IO编程

    参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 IO编程 I ...

  3. Python学习笔记:Io编程序列化

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. Python学习笔记:IO编程StringIO和BytesIO

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. python 异步io_python异步IO编程(一)

    python异步IO编程(一) 基础概念 异步IO (async IO):一种由多种语言实现的与语言无关的范例(或模型). asyncio:Python 3.4版本引入的标准库,直接内置了对异步IO的 ...

  6. python程序多线程_Python-多线程编程

    threading模块 threading 模块的对象 对 象描 述 Thread 表示一个执行线程的对象 Lock 锁原语对象(和 thread 模块中的锁一样) RLock 可重入锁对象,使单一线 ...

  7. python程序实例教程基础-编程小案例

    编程小案例 本小节实现一个通讯录管理程序,通过这个案例来融会贯通之前所学习的知识,该程序使用到如下知识点: 条件选择 循环 列表 字典 键盘输入 屏幕输出 编写程序 addr-manage.py 实现 ...

  8. python程序实例讲解_Python编程之属性和方法实例详解

    本文实例讲述了Python编程中属性和方法使用技巧.分享给大家供大家参考.具体分析如下: 一.属性 在python中,属性分为公有属性和私有属性,公有属性可以在类的外部调用,私有属性不能在类的外部调用 ...

  9. python程序报错_Python编程报错总汇

    1 使用变量时,输入错误 message = "Hello Python Crash Course reader!" print(mesage) 变量错误 Traceback (m ...

最新文章

  1. 一个可提供html5制作服务的网站
  2. 地理信息系统(GIS)
  3. php get 返回源码,php源码 fsockopen获取网页内容实例详解
  4. HTML期末作业-中国足球网页
  5. centos pip命令安装mysql_centos下pip安装mysql_python报错mysql_config not found
  6. html区分大小写字母吗,javascript变量区分大小写吗?
  7. Windows 3.1 往事:历史上第一个真正占据主导地位的操作系统
  8. JavaScript + CSS3 实现的海报画廊特效
  9. virtualbox--在win7设置ubuntu虚拟机网络
  10. 编译OpenJDK8:configure: could not find or use freetype at location
  11. 动态规划解最长公共子串
  12. firefox 2.0版如何自己制作绿色版?
  13. 文件的文件名翻译重命名技巧操作
  14. python数字信号处理应用pdf艾伦唐尼_Python数字信号处理应用
  15. HTB-Blocky
  16. 麒麟信安携手河南IT联盟召开 《麒麟信安信创应用解决方案》线上分享会
  17. 即试即买丨帕克西首推假发自动售卖机,3D发型试戴变革假发购物体验!
  18. 5分钟弄懂程序员的如何升级到架构师。
  19. OpenWrt 刷机后的网络配置
  20. STM32F429的LCD-TFT模块 资料整理

热门文章

  1. 为什么 Python 的 Range 要设计成左开右闭区间?
  2. 码农翻身之——分布式,集群,负载均衡
  3. 《图解HTTP》读书笔记(四:HTTP方法)
  4. [转]volley-retrofit-okhttp之我们该如何选择网路框架
  5. javap查看class文件
  6. 大道至简_阅读笔记02
  7. 编译android源码遇到错误及其解决方法
  8. SharePoint 2013: The New Web Application button is disabled is the central administration
  9. WPF-数据绑定:日期时间格式
  10. Push Notification (1)Google C2DM 服务