首页 > 编程语言 >python 并发编程

python 并发编程

时间:2023-07-05 15:24:33浏览次数:49  
标签:异步 同步 python 编程 阻塞 模式 并发 任务 等待

一、需要了解的概念

1、进程和程序的区别

程序就是一堆死的东西,没有生命周期
进程是有生命周期的,当一个任务进行完毕之后,进程就不存在了

2、cpu的工作机制

1.当CPU遇到I/O操作的时候,会剥夺CPU的执行权限

I/O密集型:
input output
遇到阻塞,但是不需要占用大量的CPU资源,需要等待,比如:sleep

2.当遇到的任务需要占用大量的计算时间的时候,也会剥夺执行权限

计算密集型
没有遇到阻塞,但是需要占用大量的CPU资源,也不需要等待

3、操作系统的调度算法

1. 先来先服务调度算法
2. 短作业优先调度算法
3. 时间片轮转法
4. 多级反馈队列

二、同步、异步、阻塞、非阻塞

阻塞(Blocking)和非阻塞(Non-blocking)关注的是任务的执行方式:

  • 阻塞:在阻塞模式下,任务会等待某个操作的完成,无法进行其他任务,直到操作完成才能继续执行。任务按照串行方式执行。
  • 非阻塞:在非阻塞模式下,任务不会等待操作的完成,而是立即返回并继续执行其他任务。任务可以通过轮询或回调等方式来检查操作是否完成。

同步(Synchronous)和异步(Asynchronous)关注的是任务的通信模式:

  • 同步:在同步模式下,任务发出一个请求后,会一直等待结果返回,期间无法执行其他任务。任务的执行顺序是有序的,依赖于前一个任务的结果。
  • 异步:在异步模式下,任务发出一个请求后,不需要等待结果返回,可以继续执行其他任务。任务的执行顺序可以是无序的,任务之间相互独立。

可以总结如下:

  • 阻塞和非阻塞描述任务的执行方式,阻塞模式下任务会等待操作完成,非阻塞模式下任务会继续执行。
  • 同步和异步描述任务的通信模式,同步模式下任务会等待结果返回,异步模式下任务不需要等待结果返回。
  • 阻塞和非阻塞主要关注任务自身的执行,同步和异步主要关注任务之间的通信方式。

需要注意的是,阻塞和同步以及非阻塞和异步并不完全等价。一个任务可以是阻塞同步的,即任务在等待操作完成时是阻塞的,而任务的通信方式是同步的。类似地,一个任务可以是非阻塞异步的,即任务在等待操作完成时是非阻塞的,而任务的通信方式是异步的。

 

标签:异步,同步,python,编程,阻塞,模式,并发,任务,等待
From: https://www.cnblogs.com/dgp-zjz/p/17528073.html

相关文章

  • python环境问题--import matplotlib.pyplot as plt报错
        python环境配置好后,刚开始没问题,过几天用vscode写python代码的时候,突然导matplotlib包报错:DLLloadfailed:找不到指定的模块。    首先定位报错的具体代码,发现是导入matplotlib包报错,去掉那条命令后程序正常执行,然后继续尝试,importmatplotlib没有问题,但是im......
  • 【Netty】「萌新入门」(四)异步编程模型:利用 Future 和 Promise 提高性能与响应能力
    前言本篇博文是《从0到1学习Netty》中入门系列的第四篇博文,主要内容是介绍Netty中Future与Promise的使用,通过使用异步的方式提高程序的性能和响应速度,往期系列文章请访问博主的Netty专栏,博文中的所有代码全部收集在博主的GitHub仓库中;为什么要使用异步?使用异步编程模式......
  • 西门子S7系列PLC以太网通讯处理器编程调试方法
    捷米特(北京)科技有限公司研发的捷米特以太网通讯模块,转以太网通讯模块型号有ETH-S7200-JM01和ETH-S7300-JM01,适用于西门子S7-200/S7-300/S7-400、SMARTS7-200、西门子数控840D、840DSL、合信、亿维PLC的PPI/MPI/PROFIBUS转以太网。用于西门子S7-200/S7-300/S7-400程序上下载、上位......
  • 曲线艺术编程 coding curves 第十四章 其它曲线(Miscellaneous Curves)
    第十四章其它曲线(MiscellaneousCurves)原作:KeithPetershttps://www.bit-101.com/blog/2022/11/coding-curves/译者:池中物王二狗(sheldon)blog:http://cnblogs.com/willian/源码:github:https://github.com/willian12345/coding-curves曲线艺术编程系列第十四章这是......
  • C++、Lua、Python字符串防止转义
    使用场景C++里测试路径需要转义,Windows复制路径里面的斜杠需要加斜杠,每次都需要操作比较麻烦,而且看着也不好看换行,代码里有时候硬编码一些文本、数据,依赖""的自动拼接和行末的斜杠,需要手动写\r\n换行C++Rawstringliteral以前用Lua,里有[[]],防止转义非常方便。后来了解到P......
  • python celery 使用
    目录结构配置点击查看代码fromceleryimportCelery,platformsfromkombuimportExchange,Queueplatforms.C_FORCE_ROOT=Truebroker='redis://127.0.0.1:6380/1'backend='redis://127.0.0.1:6380/2'app=Celery('sxj',b......
  • Python史上最全种类数据库操作方法,你能想到的数据库类型都在里面!甚至还有云数据库!
    本文将详细探讨如何在Python中连接全种类数据库以及实现相应的CRUD(创建,读取,更新,删除)操作。我们将逐一解析连接MySQL,SQLServer,Oracle,PostgreSQL,MongoDB,SQLite,DB2,Redis,Cassandra,MicrosoftAccess,ElasticSearch,Neo4j,InfluxDB,Snowflake,AmazonDynamoDB,MicrosoftAzureCosMosDB数据......
  • Python基础语法--课程笔记
    Smiling&Weeping----我的心是旷野的鸟,在你的眼睛里找到了它的天空定义和使用类:1.声明类:class类名:成员变量,成员函数2.定义类的对象:对象名=类名()3.成员变量:  公有变量私有变量__xxx4.构造函数: ......
  • 让python的lxml模块的xpath支持正则表达式
    python的lxml模块是处理xml文档的比较好用的工具,其中的xpath函数可以检索指定的元素,但是它不支持正则表达式,比如某个属性的值是否匹配某个正则表达式,就没有办法实现.不过可以利用它的自定义函数扩展功能来实现,如下代码所示:importrefromlxmlimportetreefromlxm......
  • [-002-]-Python3+Unittest+Selenium Web UI自动化测试之显示等待WebDriverWait
    1、WebDriverWait基本用法引入包#文件引入fromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasEC每0.5s定位ID为userid的元素,如果定位成功,执行下面的代码;直至15s超时抛出异常可用来检查页面元素是......