当前位置: 首页 > news >正文

Python高性能计算:进程、线程、协程、并发、并行、同步、异步

这里写目录标题

  • 进程、线程、协程
  • 并发、并行
  • 同步、异步
  • I/O密集型任务、CPU密集型任务

进程、线程、协程

进程、线程和协程是计算机程序执行的三种不同方式,它们在资源管理、执行模型和调度机制上有显著的区别。以下是对它们的详细解释和比较:

  • 进程:操作系统分配资源和调度的基本单位,每个进程都有自己独立的内存空间、文件描述符和其他资源。
  • 线程:线程是进程中的一个执行单元,一个进程可以包含多个线程,线程之间共享进程的内存空间和资源。
  • 协程是一种比线程更轻量级的执行单元,协程在用户空间内由程序自行调度,而不是由操作系统内核调度。

在这里插入图片描述

使用场景:

  • 进程:适用于需要高隔离性和独立资源的任务,如多进程架构的服务器、独立运行的程序等。
  • 线程:适用于需要并发执行的任务,如多线程下载、并发处理等。
  • 协程:适用于高并发 I/O 密集型任务,如网络爬虫、异步 I/O 操作等。

并发、并行

来个比喻:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。

并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时。
在这里插入图片描述

并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。所以无论从微观还是从宏观来看,二者都是一起执行的。
在这里插入图片描述

并行在多处理器系统中存在,而并发可以在单处理器和多处理器系统中都存在,并发能够在单处理器系统中存在是因为并发是并行的假象,并行要求程序能够同时执行多个操作,而并发只是要求程序假装同时执行多个操作(每个小时间片执行一个操作,多个操作快速切换执行)。

同步、异步

同步和异步是两种不同的编程模型和执行方式,它们在处理任务和资源调度方面有显著的区别。以下是对同步和异步的详细解释和比较:

  • 同步操作是指任务按顺序执行,一个任务必须等待前一个任务完成后才能开始执行。
  • 异步操作是指任务可以并发执行,一个任务不需要等待其他任务完成就可以开始执行。Python的异步编程主要是通过asyncio库来实现的,它是Python用于编写并发代码的库,使用async和await关键字。

I/O密集型任务、CPU密集型任务

总结:异步编程适合I/O密集型任务,而多线程或多进程适合CPU密集型任务。

对于CPU密集型任务,异步编程并不会带来性能上的优势,因为这类任务的瓶颈在于CPU的计算能力,而不是等待I/O。在处理CPU密集型任务时,通常会使用多线程或多进程来利用多核CPU的并行处理能力。在Python中,由于全局解释器锁(GIL)的存在,多线程并不能有效地利用多核CPU进行并行计算。因此,对于CPU密集型任务,更推荐使用多进程,可以通过multiprocessing模块来实现。

参考:

  • https://blog.csdn.net/java_zero2one/article/details/51477791
http://www.lryc.cn/news/413570.html

相关文章:

  • kafka基本操作
  • JavaFX布局-Accordion
  • 【轨物方案】评估光伏组件发电性能一致性方案
  • 安全基础学习-keil调试汇编代码
  • Unity复制对象时让私有变量也被复制的简单方法
  • Flink 实时数仓(二)【DIM 层搭建】
  • 知识图谱开启了一个可以理解的人工智能未来
  • 借助Aspose.html控件, 将SVG 转PNG 的 C# 图像处理库
  • vs-2015安装教程
  • Stable Diffusion绘画 | 文生图设置详解—随机种子数(Seed)
  • 56、php实现N的阶乘末尾有多个0
  • 混合域注意力机制(空间+通道)
  • springboot长春旅游安全地图平台-计算机毕业设计源码90075
  • apex正则表达式匹配富文本字段内容,如何只匹配文本而忽略富文本符号
  • 空气净化器对去除宠物毛有效吗?小型猫毛空气净化器使用感受
  • vue的nextTick是下一次事件循环吗
  • 5.4.软件工程-系统设计
  • Apache Kylin与BI工具集成:数据可视化实战
  • 通过idea图形化界面就能push到github流程
  • C语言初阶(10)
  • Javaweb用过滤器写防跳墙功能和退出登录
  • 小试牛刀-Telebot区块链游戏机器人(TS升级)
  • MySQL:Prepared Statement 预处理语句
  • Java:Thread类以及线程状态
  • 如何通过前端表格控件实现自动化报表?
  • Upload-labs靶场Pass01-Pass21全解
  • 使用openpyxl库对Excel数据有效性验证
  • 【算法】浅析深度优先搜索算法
  • 鸿蒙系统开发【ASN.1密文转换】安全
  • 【期末复习】软件质量保证与测试