IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python:异步编程,同步、异步、IO模型概念 -> 正文阅读

[Python知识库]Python:异步编程,同步、异步、IO模型概念

目录

异步编程

同步、异步概念

阻塞、非阻塞

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

同步IO、异步IO、IO多路复用

IO两个阶段

IO模型


异步编程

同步、异步概念

同步是指:当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去,

异步是指:当程序1调用程序2时,程序1径自继续自己的下一个动作,不受程序2的的影响。但是程序1会一直盯着程序2,直到程序2响应了,程序1会直接调用程序2,异步不保证多长时间程序2最中响应

同步调用是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。直到得到最终结果??
异步调用是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。不直接得到最终结果的

阻塞、非阻塞

阻塞和非阻塞指的是调用者(程序)在等待返回结果(或输入)时的状态。阻塞时,在调用结果返回前,当前线程会被挂起,并在得到结果之后返回。非阻塞时,如果不能立刻得到结果,则该调用者不会阻塞当前线程。因此对应非阻塞的情况,调用者需要定时轮询查看处理状态。

简单立即就是:

  • 函数或方法调用的时候,是否立即返回结果
  • 立即返回就是非阻塞的
  • 不立即返回就是阻塞调用

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

区别:

同步、异步、与阻塞、非阻塞不想关;
同步、异步强调的是,是否得到最终的结果
阻塞、与非阻塞强调的时间,是否等待

同步与异步区别在于:调用者是否得到了想要的结果。
同步就是一直要执行到返回最终结果

异步就是直接返回了,但是返回的不是最终结果。调用者不能通过这种调用得到结果,还是通过被调用者,使用其它方式通知调用者,来取回最终结果

阻塞与非阻塞的区别在于,调用者是否还能干其他事
阻塞,调用者就只能干等
非阻塞,调用者可以先去忙会其他的,不用一直等

联系:

同步阻塞:什么事都不干,就等着你打饭给我,打到饭事结果,而且我啥事都不干一直等,同步加阻塞
同步非阻塞:我等着你打饭给我,但我可以完手机、看看电视、大大游戏,打饭时 结果,但是我不一致等

异步阻塞:我要打饭,你说等叫号,并没有返回饭给我,我啥事不干,就等着饭好了你叫我,例如:叫好
异步非阻塞:我要打饭,你说等叫好,并没有返回饭给我,我在旁边看电视,玩手机,饭打好了叫我;

同步IO、异步IO、IO多路复用

IO两个阶段

IO过程分两阶段:

  • 数据准备阶段
  • 内核空间负责回用户进程缓冲区阶段

发生IO的时候:

  • 内核从输入设备读、写数据
  • 进程从内核复制数据

IO模型

同步IO模型包括:阻塞IO、非阻塞IO、IO多路复用

1、阻塞IO

?进程等待(阻塞),直到读写完成(全程等待);read/write函数

2、非阻塞IO

进程调用read操作,如果IO设备没有准备好,立即返回ERROR,进程不阻塞。在进行下一个轮询,用户可以再次发起系统调用,如果内核已经准备好,就阻塞,然后复制数据到用户空间,

第一阶段数据没有主备好的,就先忙别的了,等会再来看看,检查数据是否准备好了的过程时非阻塞的。

第二阶段时阻塞的,即内核空间和用户空间之间复制数据是阻塞的。

轮询的过程是非常耗CPU时间,一般只有特定场合才能使用

3、IO多路复用

所谓IO多路复用,就是同时监控多个IO,有一个准备好了,就不需要在等了开始处理,提高了同时处理IO的能力??

select 几乎所有操作系统平台都支持,poll是对select的升级
epoll,linux系统内核2.5+开始支持,对select和poll的增强,在监视的基础上,增加回调机制。BSD,MAC平台有kqueue,Windos有iocp

?以select为例,将关注的IO操作告诉Select函数并调用,进程阻塞,内核“监视”select关注的文件描述符fd,被关注的任何一个fd对应的IO准备好了数据,select返回,再使用read将数据复制到用户进程

Select举例,食堂供应很多菜(众多的IO),你需要吃某三菜一汤,大师傅(操作系统)说要先做,需要等,你只好等待,其中一样菜好了,大师傅叫你过来说你点的菜有好的了,你要自己找找哪一样菜好了,请服务员把做好的菜打给你

一般情况下,select最多监听1024个fd(可以修改,但不建议改)但是由于select采用了轮询的方式,当管理的IO多了,每次都要遍历全部fd,效率低下。

epoll没有管理的fd的上下按,且是回调机制,不需要遍历,效率很高

4、异步IO

进程发起异步IO请求,立即返回。内核完成IO的阶段的两个阶段,内核给进程发一个信号。

举例:点了外卖,饭菜在饭店做好了(第一阶段),快递员从饭店送到你家门口(第二阶段)

LInux的aio的系统调用,内核从版本2.6开始支持

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:07:30  更:2021-07-22 14:07:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 23:12:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码