python并发编程: Python速度慢的罪魁祸首,全局解释器锁GIL

news2025/1/1 21:33:17

python速度慢的两大原因

  • 动态类型语言,边解释边执行
  • 由于GIL,无法利用多核CPU并发执行

GIL是什么?

全局解释锁(Global Interpreter Lock,GIL)是计算机程序设计语言解释器用于同部线程的一种机制,它使得任何时刻仅有一个进程在执行。即使在多核心处理器上,使用GIL的解释器也只允许同一时间执行一个线程。 alt

在上图中的流程:

  • 当线程1在运行的时候,则会启动GIL
  • 当线程1需要进行IO操作时,GIL则会释放,此时线程1切换到线程2运行,GIL再次启用。
  • 当线程2运行IO时,GIL再次释放,此时线程2切换到线程3,GIL则再次启用。

为什么有GIL这个东西?

为了解决多线程之间数据完整性和状态同步问题。 举例子:Python中对象的管理,是使用引用计数器进行的,引用数为0则释放对象。开始:线程A和线程B都引用了对象obj,obj.ref_num = 2,线程A和B都想撤销对obj的引用

alt

上图中线程A和线程B都引用了对象obj, 首先,线程A准备销毁obj引用,将计数器减1,刚减完,切换到了线程B, 线程B也要销毁obj引用,将计数器减1,然后判断引用等于0,则将其释放掉。 当切换到线程A继续执行的时候,发现obj的引用已经无法获取计数器的值了。 所以,就报错了。

怎么规避GIL带来的限制?

  • 多线程 threading 机制依然是有用的,用于IO密集型计算。因为在 I/O (read,write,send,recv,etc.)期间,线程会释放GIL,实现CPU和IO的并行。因此多线程用于IO密集型计算依然可以大幅提升速度。但是多线程用于CPU密集型计算时,只会更加拖慢速度

  • 使用multiprocessing的多进程机制实现并行计算、利用多核CPU优势。为了应对GIL的问题,Python提供了multiprocessing

总结

  • 多线程适用于IO密集型问题,当线程在处理IO问题时,将释放GIL锁,并切换至下一线程,线程的切换使用的是CPU,线程的处理使用的是IO,这样就实现了CPU和IO的并行。
  • 多进程用于处理CPU密集性问题,适用于充分发挥多核CPU的优势,多进程其实变相的解决了GIL锁的弊端。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514156.html

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

相关文章

c#笔记-异常

异常 当一个程序遇到各种各样的问题而无法正常运行时,我们需要知道导致问题的原因, 并根据原因来解决问题。 一种常见的方式是程序给出一串错误码,然后开发人员查找对应的错误信息。 而在c#中,我们可以在程序内部就处理异常&am…

改进YOLOv8 | 即插即用篇 | 在 C2F 模块中添加 【SE】 【CBAM】【 ECA 】【CA 】注意力机制 | 附详细结构图

这篇教程是在你默认添加了《改进YOLOv8 | 即插即用篇 | 手把手教你 YOLOv8 添加注意力机制 | 适用于【检测任务】【分类任务】【分割任务】【关键点任务】| 20+ 种全打通!》的代码后进行的后续改进的补充。 1. SE 注意力模块 论文名称:《Squeeze-and-Excitation Networks》 …

AI画图 Ubuntu 20.04.5 LTS x86_64 Docker stable diffusion webui 及 http api接口

资源 Docker镜像 docker pull darkroot1234/ayanami:latest 参考地址: docker一键运行stable diffusion webui,常用插件和功能完备,获得镜像后可打包带走 - 哔哩哔哩 nvidia cuda 驱动 ​​​​​​​Linux x64 (AMD64/EM64T) Display D…

numpy中reshape(1,-1) 和 reshape(-1,1) 的理解

我们都知道**reshape()方法**的作用是将数据按照指定的维度重新组织并返回。也就是reshape(行,列)可以根据指定的数值将数据转换为特定的行数和列数,就是转换。 但我们经常在大佬的代码中,或者报错提示中发现&#xf…

什么是虚拟机?

我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的,而这个软件包在苹果的 Mac OSX 系统上是无法安装的。类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 Windows 系统上安装。 为什么不同系统上的软件无法安装&#xff0c…

常见4种风险定量分析法

常见的风险定量分析方法主要有: 一、 敏感性分析法 用于确定哪些风险对项目影响最大,将其它不确定因素固定在基准值,再考察某个因素的变化会对目标产生多大的影响。 在这一分析中,检查每一个项目成分的不确定性对所检查项目目标的…

提示工程L1:关键原则

提示工程指南:关键原则 一、 环境配置 chatgpt使用有诸多限制,所以采用国产模型来代替,加载开源的chatGLM模型,使用ChatGLM-6b的INT8版本。 chatGLM6b在LLM匿名竞技场中的排名: import os import torch import war…

大学生找工作防坑指南,收藏10000+

2023年就业季即将抵达,你害怕了吗? 据数据统计,今年的应届生人数再创新高,将达到1158万人,相信同学们看到这串数字已经感到毛骨悚然。然而大学生要面临的挑战不仅这些,最残酷的考验还在最后。 作为初出茅庐…

某些科技外企结束在中国市场直接运营,你如何看?

在新的竞争态势下, 向左走,还是向右走…… 【全球存储观察 | 热点关注】前些天,我发了一篇文章《你如何看LinkedIn“领英职场”将于8月9日起停止中国服务?》引发了业内朋友的热议,大家一致认为&#xff0c…

const和int const 理解笔记(图、代码、讲解)

本文参考了 》C 中的 const & (常引用)参数 - 知乎 因为博文写的很详细,所以博主按着自己的理解写了demo, 和一些方便自己理解的备注。 自学的时候看到了下面这个代码,所以 const&是啥 首先,一句…

C++中继承的语法和使用

C入门必看 继承的定义及概念概念定义 基类和派生类对象赋值转换继承后的作用域派生类默认的6个成员函数该何去何从? 多继承 面向对象语言3大特性:封装、继承、多态。 继承的定义及概念 概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最…

Dubbo接口测试没你想的那么高大上

主题:Dubbo接口测试没你想的那么高大上 一、Dubbo是什么? Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架一款分布式服务框架、高性能和透明化的RPC远程服务调用方案、SOA服务治理方案下图是阿里巴巴技术解决方案演变图,从单应用->…

卡特兰数三个通项公式的推导

前提条件: 有两种操作,一种操作的次数不能超过另外一个,或者是不能有交集这些操作的合法方案数,通常是卡特兰数 情景: 1)n个0和n个1构成的字串,所有的前缀子串1的个数不超过0的个数&#xff…

月薪低于5千元必看,省钱购物攻略,本人亲测有效

作为资深的网购用户,我不允许我的姐妹们还不知道,网上购物如何省钱?如果你是学生党,或者月薪低于5千元,一定要看一看!学会了不但能提升生活品质,还能帮你省下好多钱~ 同样的东西,我…

云渲染动画价格一般多少?

云渲染是什么? 云渲染就是通过互联网将用户本地需要渲染的文件上传到云端服务器中,再通过云端庞大的计算机集群资源进行运算操作,帮助用户在云端完成渲染工作后,用户再下载到本地的过程,整个过程操作十分简便。 云渲染…

解释一下泛型擦除?为什么java必须强制?

一、概述: 在解释什么是泛型擦除之前我们得先了解什么是Java泛型。所谓的泛型就是参数化的类型。这就意思着我们可以具体的类型作为一个参数传递给方法、类、接口。 为什么我们需要泛型呢?首先我们都知道在java里,Object就是对象的父类。Ob…

2023 年10款「会议管理」软件对比

在这篇文章中,我们将介绍2023年你可以尝试的10个会议管理软件。我们还将介绍会议管理的基础知识,涉及的步骤,以及如何创建会议议程。 2023 年 10 款会议管理软件对比 会议管理软件解决方案是一种数字工具,可以让个人和团队计划、…

一、【Pytorch笔记】pytorch简介,开发环境安装,搭建

一、下载Anaconda Anaconda包括Conda、Python以及一大堆安装好的工具包(其他深度学习里用到的东西),比如:numpy、pandas等。所以下了Anaconda就不用下载Python进入Anaconda官网:https://www.anaconda.com/download/下…

【数字 IC】从底层重新认识 D 触发器、建立时间和保持时间

目录 1. NMOS 和 PMOS 2. MOS 管搭建逻辑门 3. 锁存器和触发器 3.1 交叉耦合反相器 3.2 SR 锁存器 3.3 D 锁存器 3.4 D 触发器 4. D 触发器的建立、保持时间 1. NMOS 和 PMOS MOSFET(金属氧化物半导体场效应晶体管)或 IGFET(绝缘栅场…

Web3中文|又一巨头入局?亚马逊或将正式进军NFT领域

行业的风向总随着巨头公司而动。 自从亚马逊公司推出 NFT 市场的消息传出后,大众的目光就锁定在了亚马逊的身上,作为科技巨头的亚马逊入局 NFT 对整个行业都有着举足轻重的意义。 受 FTX 的崩溃的影响,亚马逊 NFT 市场的推出几经波折&#xf…