首页
学习
活动
专区
圈层
工具
发布

Python笔记-IO同步和异步、 读写

有两种办法: 第一种是CPU等着,也就是程序暂停执行后续代码,等100M的数据在10秒后写入磁盘,再接着往下执行,这种模式称为同步IO; 另一种方法是CPU不等待,只是告诉磁盘,“您老慢慢写,不着急,我接着干别的事去了...同步和异步的区别就在于是否等待IO执行的结果。...好比你去麦当劳点餐,你说“来个汉堡”,服务员告诉你,对不起,汉堡要现做,需要等5分钟,于是你站在收银台前面等了5分钟,拿到汉堡再去逛商场,这是同步IO。...很明显,使用异步IO来编写程序性能会远远高于同步IO,但是异步IO的缺点是编程模型复杂。 想想看,你得知道什么时候通知你“汉堡做好了”,而通知你的方法也各不相同。...总之,异步IO的复杂度远远高于同步IO。 读文件 1、读写一个文件之前需要打开它: fileobj = open(filename, mode) mode :文件类型和操作的字符串。

2.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    同步 IO 和异步 IO

    io 操作大致分为两种: 文件 io 网络 io io 操作分为两步 发起 io 请求 接收处理 io 同步 io 和异步 io 最大的区别就是同步 io 的发起方(用户线程)会阻塞或轮询等待 io 完成...同步 io 的特点 1、同步 io 是用户线程发起 io 请求并以阻塞或轮询的方式来等待 io 的完成 2、同步 io 是 io 的发起方,同时也是处理方 3、同步 io 是需要将内核态准备就绪的数据拷贝到用户态...,所以需要阻塞用户态程序并等待 io 完成 异步 io 的特点 1、异步 io 在用户线程发起 io 请求后会立即返回继续执行后续的逻辑流 2、异步 io 是 io 的发起方,但内核态才是处理方 3、异步...io 的处理方是内核态,所以不需要阻塞 阻塞 io: 用户线程发起 io 请求并阻塞用户线程释放 CPU 执行权,等待内核态的 io 处理完成。...总结以上几种 io 模型,除了最后一个是异步 io 模型,其它的 io 模型都是同步。

    1.7K30

    Windows内核原理-同步IO与异步IO

    目的 本片文章主要讲解同步I/O与异步I/O相关知识,希望通过编写本篇文章为起点,对windows内核原理知识进行学习与梳理。发现并弥补遗漏的知识点并加以学习。...使用设备内核对象进行线程同步时,无法区分当前完成通知的I/O是读操作还是写操作,因此无论是读还是写都会将其状态设置为触发状态。...此使我们发出的I/O请求时,系统内核返回IO_PENDDING状态,然后线程就可以继续处理其他事情。...总结 同步I/O会阻塞线程,想要提高执行速度必须增加线程,但是会由于线程上下文切换造成性能损失。 Windows下大约每15ms会进行一次线程调度。...使用异步I/O时线程不会阻塞,系统底层将每个I/O请求生成I/O请求包(IRP)加入到设备驱动程序的请求队列中,然后直接返回IO_PENDDING状态表示请求受理成功,当底层设备完成了真实的I/O请求后会通过中断控制器通过中断操作通知

    2.2K10

    同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别

    POSIX 同步IO、异步IO、阻塞IO、非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下。...POSIX(可移植操作系统接口)把同步IO操作定义为导致进程阻塞直到IO完成的操作,反之则是异步IO 按POSIX的描述似乎把同步和阻塞划等号,异步和非阻塞划等号,但是为什么有的人说同步IO不等于阻塞IO...这一过程就可以看成是使用了阻塞IO模型,因为如果水龙头没有水,他也要等到有水并装满杯子才能离开去做别的事情。很显然,这种IO模型是同步的。 ?...),如果按这样理解,这种IO模型也能称之为非阻塞IO模型,但是按POSIX来看,它也是同步IO,那么也和楼上一样称之为同步非阻塞IO吧。...总结 IO分两阶段: 1.数据准备阶段 2.内核空间复制回用户进程缓冲区阶段 一般来讲:阻塞IO模型、非阻塞IO模型、IO复用模型(select/poll/epoll)、信号驱动IO模型都属于同步IO,

    1.7K20

    理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度、环境不一样。所以,我们先说明基本的IO操作及环境。...3-2、同步IO和异步IO 同步IO:导致请求进程阻塞,直到I/O操作完成。 异步IO:不导致请求进程阻塞。 上面两个定义是《UNIX网络编程 卷1:套接字联网API》给出的。...这不是很好理解,我们来扩展一下,先说说同步和异步,同步和异步关注的是双方的消息通信机制: 同步:双方的动作是经过双方协调的,步调一致的。 异步:双方并不需要协调,都可以随意进行各自的操作。...这里我们的双方是指,用户进程和IO设备;明确同步和异步之后,我们在上面网络输入操作例子的基础上,进行扩展定义: 同步IO:用户进程发出IO调用,去获取IO设备数据,双方的数据要经过内核缓冲区同步,完全准备好后...异步IO:用户进程发出IO调用,去获取IO设备数据,并不需要同步,内核直接复制到进程,整个过程不导致请求进程阻塞。

    38.6K71

    IO-同步、异步、阻塞、非阻塞

    四种组合方式 同步阻塞方式: 发送方发送请求之后一直等待响应。 接收方处理请求时进行的IO操作如果不能马上等到返回结果,就一直等到返回结果后,才响应发送方,期间不能进行其他工作。...同步非阻塞方式: 发送方发送请求之后,一直等待响应。 接受方处理请求时进行的IO操作如果不能马上的得到结果,就立即返回,取做其他事情。...当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方,发送方才进入下一次请求过程。(实际不应用) 异步阻塞方式: 发送方向接收方请求后,不等待响应,可以继续其他工作。...接收方处理请求时进行IO操作如果不能马上得到结果,就一直等到返回结果后,才响应发送方,期间不能进行其他操作。...接收方处理请求时进行IO操作如果不能马上得到结果,也不等待,而是马上返回去做其他事情。 当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方。

    1.5K31

    linux 同步IO: sync、fsync与fdatasync

    因为write调用不会等到硬盘IO完成之后才返回,因此如果OS在write调用之后、硬盘同步之前崩溃,则数据可能丢失。...(synchronized-IO)原语来保证: 1 #include 2 int fsync(int fd); fsync的功能是确保文件fd所有已修改的内容已经正确同步到硬盘上,...类似,但是仅仅在必要的情况下才会同步metadata,因此可以减少一次IO写操作。...使用fdatasync优化日志同步 文章开头时已提到,为了满足事务要求,数据库的日志文件是常常需要同步IO的。由于需要同步等待硬盘IO完成,所以事务的提交操作常常十分耗时,成为性能的瓶颈。...在Berkeley DB下,如果开启了AUTO_COMMIT(所有独立的写操作自动具有事务语义)并使用默认的同步级别(日志完全同步到硬盘才返回),写一条记录的耗时大约为5~10ms级别,基本和一次IO操作

    3.3K30

    Python IO

    Python IO 文件打开和关闭 文件打开和关闭就是两个函数,一个open函数一个close函数 open函数的原型 open(file, mode='r', buffering=-1, encoding...In [1]: from io import StringIO In [2]: help(StringIO) In [3]: sio = StringIO() # 创建StringIO对象,也可以用...要读取StringIO,可以用一个str初始化StringIO,然后,像读文件一样读取: In [1]: from io import StringIO In [2]: sio = StringIO(...os.path是已字符串的方式操作路径的:import os pathlib是面向对象设计的文件系统路径:import pathlib pathlib在python3.2以上开始默认支持,在python2.7...私有协议pickle pickle 是Python私有的序列化协议 pickle源代码见:lib/python3.5/pickle.py 主要函数 dumps 对象导出为数据,即序列化 loads 数据载入为对象

    1.3K10

    IO通信模型(二)同步非阻塞模式NIO(NonBlocking IO)

    同步非阻塞模式(NonBlocking IO) 在非阻塞模式中,发出Socket的 accept()和 read()操作时,如果内核中的数据还没有准备好,那么它并不会阻塞用户进程,而是立刻返回一个信息。...= SUCCESS){ } process(buffer); } Java同步非阻塞模式 如上所述,Java的Socket是阻塞模式的典型应用。...* * 此时可以实现非阻塞的IO,但是因为调用了系统底层的阻塞同步IO, * 因此仍然没有从根本上解决问题 * * @Author niujinpeng * @Date 2018/10...整个IO请求的过程中,虽然用户线程每次发起IO请求后可以立即返回,但是为了等到数据,仍需要不断地轮询、重复请求,消耗了大量的CPU的资源。...一般很少直接使用这种模型,而是在其他IO模型中使用非阻塞IO这一特性。 开发难度相对于阻塞IO模式较难,适合并发小且不需要及时响应的网络应用开发。

    1K10

    关于IO的同步,异步,阻塞,非阻塞

    中途正好讨论了网络IO的同步、异步、阻塞、非阻塞的概念,当时讲下来,大家的理解各不相同,各执己见。搜索了网络上的一些文章,观点也各不相同,甚至连wiki也将异步和非阻塞当成一个概念在解释。...将数据从内核缓冲区复制到用户进程缓冲区 同步,异步的区别 那么究竟什么是同步和异步的区别呢?...请重点读一下原文6.2节中的信号驱动IO和异步IO中的比较。最后总结出来是: · 同步IO,需要用户进程主动将存放在内核缓冲区中的数据拷贝到用户进程中。...· 异步IO,内核会自动将数据从内核缓冲区拷贝到用户缓冲区,然后再通知用户。 这样,同步和异步的概念就非常明显了。以上的五种IO模型,前面四种都是同步的,只有第五种IO模型才是异步的IO。...结论 · 判断IO是同步还是异步,是看谁主动将数据拷贝到用户进程。 · select或者poll,epoll,是同步调用,进行此调用的用户进程也处于阻塞状态。

    1.1K40

    关于IO的同步,异步,阻塞,非阻塞

    中途正好讨论了网络IO的同步、异步、阻塞、非阻塞的概念,当时讲下来,大家的理解各不相同,各执己见。搜索了网络上的一些文章,观点也各不相同,甚至连wiki也将异步和非阻塞当成一个概念在解释。...同步,异步的区别 那么究竟什么是同步和异步的区别呢?...请重点读一下原文6.2节中的信号驱动IO和异步IO中的比较。最后总结出来是: 同步IO,需要用户进程主动将存放在内核缓冲区中的数据拷贝到用户进程中。...异步IO,内核会自动将数据从内核缓冲区拷贝到用户缓冲区,然后再通知用户。 这样,同步和异步的概念就非常明显了。以上的五种IO模型,前面四种都是同步的,只有第五种IO模型才是异步的IO。...结论 判断IO是同步还是异步,是看谁主动将数据拷贝到用户进程。 select或者poll,epoll,是同步调用,进行此调用的用户进程也处于阻塞状态。

    1K100

    Python 文件IO

    Python 文件I/O 阅读本文需要3分钟 Python提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用file对象做大部分的文件操作。...只讲述所有基本的的I/O函数 1 ✕ open函数 你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写。...当一个文件对象的引用被重新指定给另一个文件时,Python会关闭之前的文件。用close()方法关闭文件是一个很好的习惯。...需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。...需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。 语法: fileObject.read([count]); 在这里,被传递的参数是要从已打开文件中读取的字节计数。

    77720

    Python IO编程

    由于 CPU 和内存的速度远远超过外设的速度,因此 IO 操作通常分为同步和异步两种方式,我们生活中所使用的操作系统通常情况下设计到 IO 操作的均使用的是异步 IO。...那么同步 IO 和异步 IO 的区别是什么 同步 IO:即在遇到外设读取数据时,CPU 停止后续代码的执行,等待 IO 读取完成在接着执行剩余的代码。...同步 IO 和异步 IO 最大的区别在遇到外设长时间读取数据时,CPU 是否等待 IO 的执行结果。 异步 IO 的性能远远高于同步 IO,但异步 IO 的复杂度远远高于同步 IO。...操作 IO 的能力都是由操作系统提供的,每一种编程语言都会讲操作系统提供的接口进行封装以方便使用。 在 python 中常用的 IO 操作有文件读写、内存读写等。.../usr/bin/env python3#-*- coding:utf-8 -*-import iof = io.StringIO() f.write("hello world!")

    71420
    领券