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

news2024/11/13 15:41:50

这里写目录标题

  • 进程、线程、协程
  • 并发、并行
  • 同步、异步
  • 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.coloradmin.cn/o/1973274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一款有趣的工具,锁定鼠标键盘,绿色免安装

这是一款完全免费的程序,可以实现在不锁定屏幕的情况下锁定鼠标键盘,让鼠标键盘无法操作。比较适合防止误碰鼠标键盘,以及离开电脑时不希望别人操作自己的电脑。 ★★★★★锁定鼠标键盘工具:https://pan.quark.cn/s/e5c518a2165…

路由配置修改(五)

一、默认约定式路由 1、umi 会根据 pages 目录自动生成路由配置。 * name umi 的路由配置* description 只支持 path,component,routes,redirect,wrappers,name,icon 的配置* param path path 只支持两种占位符配置,第一种是动态参数 :id 的形式,第二种…

win11 intel新显卡控制面板无自定义分辨率选项解决

问题 下图是现在的intel显卡控制面板,不知道为啥变得很傻瓜式了,连所有显卡控制面板都有的分辨率自定义也被干掉了。 解决方式 其实解决很简单,因为自定义分辨率对显卡玩游戏来说还是很常用的,intel在beta版又加回来了&#x…

样式与特效(2)——新闻列表

1.盒子模型的边距概念 ) Margin-top 上面 Margin-bottom 底部 Margin-right 右边 Margin-left 左边 Margin : 10px (上下左右都是10px) Margin :10px,20px (上下边距10px 左右20px) CSS里面最重要的属性之一 将页面理解成…

C++ | Leetcode C++题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; class Solution { public:string removeDuplicateLetters(string s) {vector<int> vis(26), num(26);for (char ch : s) {num[ch - a];}string stk;for (char ch : s) {if (!vis[ch - a]) {while (!stk.empty() && stk.back(…

C#值类型和引用类型,类和结构体

1、类class是引用类型&#xff0c;多个引用类型变量的值会互相影响。存储在堆&#xff08;heap&#xff09;上 2、结构体struct是值类型&#xff0c;多个值类型变量的值不会互相影响。存储在栈&#xff08;stack&#xff09;上 using System; using System.Collections.Generi…

PTA题目|象限的判断(python)

题目要求 输入一对坐标&#xff0c;输出它在直角坐标系中的象限。 输入格式: 输入坐标(x,y)&#xff0c;&#xff08;假设输入的x或y坐标值一定不会为0&#xff09;如&#xff1a;(3.5,-2)。 输出格式: 输出对应的象限&#xff0c;如&#xff1a;第四象限 输入样例: 在这…

Python | Leetcode Python题解之第315题计算右侧小于当前元素的个数

题目&#xff1a; 题解&#xff1a; import numpy as np from bisect import bisect_leftclass Solution:max_len 10000c []buckets []def countSmaller(self, nums: List[int]) -> List[int]:self.c [0 for _ in range(len(nums) 5)]counts [0 for _ in range(len(…

Sentinel-1 Level 1数据处理的详细算法定义(五)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程,以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下: Sentinel-1 L…

前端怎么做一个验证码和JWT,使用mockjs模拟后端

流程图 创建一个发起请求 创建一个方法 getCaptchaImg() {this.$axios.get(/captcha).then(res > {console.log(res);this.loginForm.token res.data.data.tokenthis.captchaImg res.data.data.captchaImgconsole.log(this.captchaImg)})}, captchaImg: "", 创…

钡铼技术M12双通道防水分线盒稳定可靠

钡铼技术的DB系列M12双通道防水分线盒是一款专为工业自动化环境设计的高性能产品。其采用耐酸碱腐蚀材料制成的壳体&#xff0c;能够达到IP67防护等级&#xff0c;并通过灌胶工艺进一步提升到IP69K防护等级&#xff0c;确保在恶劣的工业条件下仍然能稳定可靠地运行。 技术特点…

小怡分享之Java的继承和多态

前言&#xff1a; &#x1f308;✨小怡给大家分享了Java的类和对象&#xff0c;今天小怡给大家分享的是继承和多态。 1.继承 1.1 为什么需要继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&…

无人机之环境监测篇

无人机在各个领域的应用越来越广泛&#xff0c;环境监测便是其中之一&#xff0c;它们能够提供高效、安全、经济的监测手段&#xff0c;帮助科学家和管理者更好的理解环境状况并采取相应措施。 一、污染监测 无人机可以搭载各种传感器&#xff0c;如气体检测器、红外热像仪等&…

Map遍历 32

package Array.collection;import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.function.BiConsumer;public class map1 {public static void main(String[] args) {Map<String, Double> anew HashMap<>();a.put("合法…

图论进阶之路-最短路(Floyd)

时间复杂度&#xff1a;O(n^3) 使用场景&#xff1a;当需要得知任意两个点的最短距离以及其路径时使用 准备&#xff1a;需要两个矩阵 一个记录最短距离&#xff08;D&#xff09; 一个记录最短路径的最后一个结点&#xff08;P&#xff09; 其核心在于不断的判断越过中间…

transformer代码学习及pytorch函数学习

torch.randint(low, high, size, dtypetorch.int64, devicecpu, **kwargs) low 和 high 如上所述。size 是一个元组&#xff0c;表示张量的形状。dtype 是数据类型&#xff0c;默认为 torch.int64&#xff0c;表示生成的整数是64位整数。device 指定了生成张量所在的设备&#…

结构体与共用体

一、链表 1.尾插 2.头删&#xff1a; 3.尾删&#xff1a; 4.内存泄漏&#xff1a;malloc调用的节点需要手动清除 头删效率更高&#xff0c;算法复杂度更低 二、共用体 1.形式&#xff1a;union 共用体名{成员表列} 变量表列&#xff1b;共用体的成员会占用同样的内存空间 …

微信小程序_对接腾讯实时音视频_多人会议

目录 一、开通腾讯实时音视频 1.腾讯实时音视频简介 2.创建应用 二、快速接入 1.微信小程序账号类目资格 2.跑通腾讯多人会议源码 3.发行项目 三、开发自己的业务代码 如何对接腾讯实时音视频的多人会议产品&#xff0c;从开通服务到对接完成&#xff0c;一 一讲解。 一…

LBS 开发微课堂|Polyline绘制优化:效果更丰富,性能更佳!

为了让广大的开发者 更深入地了解 百度地图开放平台的技术能力 轻松掌握满满的技术干货 更加简单地接入 开放平台的服务 我们特别推出了 “位置服务&#xff08;LBS&#xff09;开发微课堂” 系列技术案例 第一期的主题是 《Polyline 绘制优化升级》 你还想了解哪些…

MySQL:Prepared Statement 预处理语句

预处理语句&#xff08;Prepared Statement&#xff09; 是一种在数据库管理系统中使用的编程概念&#xff0c;用于执行对数据库进行操作的 SQL 语句。 使用预处理语句的具体方式和语法依赖于所用的编程语言和数据库管理系统。常见的编程语言如 Java、PHP、Python 和 C# 都提供…