python程序官方网站-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由于复杂度太高,后续涉及到服务器端程序开发时我们再讨论。
python程序官方网站-IO编程相关推荐
- Python自学笔记D9——IO编程、进程、线程和正则表达式
文章目录 IO编程 文件读写 StringIO和BytesIO 操作文件和目录 序列化 进程和线程 多进程 多线程 ThreadLocal 多进程和多线程对比 分布式进程 正则表达式 IO编程 由于程 ...
- Python学习笔记十 IO编程
参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 IO编程 I ...
- Python学习笔记:Io编程序列化
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:IO编程StringIO和BytesIO
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- python 异步io_python异步IO编程(一)
python异步IO编程(一) 基础概念 异步IO (async IO):一种由多种语言实现的与语言无关的范例(或模型). asyncio:Python 3.4版本引入的标准库,直接内置了对异步IO的 ...
- python程序多线程_Python-多线程编程
threading模块 threading 模块的对象 对 象描 述 Thread 表示一个执行线程的对象 Lock 锁原语对象(和 thread 模块中的锁一样) RLock 可重入锁对象,使单一线 ...
- python程序实例教程基础-编程小案例
编程小案例 本小节实现一个通讯录管理程序,通过这个案例来融会贯通之前所学习的知识,该程序使用到如下知识点: 条件选择 循环 列表 字典 键盘输入 屏幕输出 编写程序 addr-manage.py 实现 ...
- python程序实例讲解_Python编程之属性和方法实例详解
本文实例讲述了Python编程中属性和方法使用技巧.分享给大家供大家参考.具体分析如下: 一.属性 在python中,属性分为公有属性和私有属性,公有属性可以在类的外部调用,私有属性不能在类的外部调用 ...
- python程序报错_Python编程报错总汇
1 使用变量时,输入错误 message = "Hello Python Crash Course reader!" print(mesage) 变量错误 Traceback (m ...
最新文章
- 一个可提供html5制作服务的网站
- 地理信息系统(GIS)
- php get 返回源码,php源码 fsockopen获取网页内容实例详解
- HTML期末作业-中国足球网页
- centos pip命令安装mysql_centos下pip安装mysql_python报错mysql_config not found
- html区分大小写字母吗,javascript变量区分大小写吗?
- Windows 3.1 往事:历史上第一个真正占据主导地位的操作系统
- JavaScript + CSS3 实现的海报画廊特效
- virtualbox--在win7设置ubuntu虚拟机网络
- 编译OpenJDK8:configure: could not find or use freetype at location
- 动态规划解最长公共子串
- firefox 2.0版如何自己制作绿色版?
- 文件的文件名翻译重命名技巧操作
- python数字信号处理应用pdf艾伦唐尼_Python数字信号处理应用
- HTB-Blocky
- 麒麟信安携手河南IT联盟召开 《麒麟信安信创应用解决方案》线上分享会
- 即试即买丨帕克西首推假发自动售卖机,3D发型试戴变革假发购物体验!
- 5分钟弄懂程序员的如何升级到架构师。
- OpenWrt 刷机后的网络配置
- STM32F429的LCD-TFT模块 资料整理
热门文章
- 为什么 Python 的 Range 要设计成左开右闭区间?
- 码农翻身之——分布式,集群,负载均衡
- 《图解HTTP》读书笔记(四:HTTP方法)
- [转]volley-retrofit-okhttp之我们该如何选择网路框架
- javap查看class文件
- 大道至简_阅读笔记02
- 编译android源码遇到错误及其解决方法
- SharePoint 2013: The New Web Application button is disabled is the central administration
- WPF-数据绑定:日期时间格式
- Push Notification (1)Google C2DM 服务