为什么在Python里推荐使用多进程而不是多

在Python多线程下,每个线程的执行方式:1、获取GIL 2、执行代码直到sleep或者是python虚拟机将其挂起。3、释放GIL                可见,某个线程想要执行,必须先拿到GIL,我们可以把GIL看作是“通行证”,并且在一个...
为什么在Python里推荐使用多进程而不是多
最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢?        
        
要知其然,更要知其所以然。所以有了下面的深入研究:        
        

首先强调背景:        
1、GIL是什么?
GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。        
2、每个CPU在同一时间只能执行一个线程(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。)

在Python多线程下,每个线程的执行方式:
1、获取GIL
2、执行代码直到sleep或者是python虚拟机将其挂起。
3、释放GIL        
        
可见,某个线程想要执行,必须先拿到GIL,我们可以把GIL看作是“通行证”,并且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不允许进入CPU执行。        
        
在Python2.x里,GIL的释放逻辑是当前线程遇见IO操作或者ticks计数达到100(ticks可以看作是Python自身的一个计数器,专门做用于GIL,每次释放后归零,这个计数可以通过 sys.setcheckinterval 来调整),进行释放。        
        
而每次释放GIL锁,线程进行锁竞争、切换线程,会消耗资源。并且由于GIL锁存在,python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行),这就是为什么在多核CPU上,python的多线程效率并不高。        
                                 
那么是不是python的多线程就完全没用了呢?        
在这里我们进行分类讨论:        
1、CPU密集型代码(各种循环处理、计数等等),在这种情况下,由于计算工作多,ticks计数很快就会达到阈值,然后触发GIL的释放与再竞争(多个线程来回切换当然是需要消耗资源的),所以python下的多2018-01-20
全局解释锁2018-01-19
mengvlog 阅读 33 次 更新于 2025-09-11 05:53:24 我来答关注问题0
  •  赛玖百科小窍门 为什么要用python去学数据分析呢?

    综上所述,用Python去学数据分析具有诸多优势,不仅可以提高数据分析的效率和准确性,还可以拓展数据分析的应用场景和深度。因此,对于想要从事数据分析工作的人来说,学习Python是非常有必要的。(注:图片为示例,展示了数据分析在实际工作中的应用场景)

  •  文暄生活科普 python为什么推荐蛇形命名法?

    简言之,Python推荐使用snake case命名法,主要目的是为了提高代码的可读性和一致性,使得代码更加清晰易懂。这种风格的广泛使用,也反映了Python与C语言风格的继承关系。遵循PEP8的命名规范,可以使得Python代码更加规范、易于理解和维护。

  • 1、CPU密集型代码(各种循环处理、计数等等),在这种情况下,由于计算工作多,ticks计数很快就会达到阈值,然后触发GIL的释放与再竞争(多个线程来回切换当然是需要消耗资源的),所以python下的多

  •  匡梧太叔幼菱 为什么在python里推荐使用多进程而不是多线程

    监控一个信号就起一个线程与进程处理。这样的逻辑是不太合适的。所有的资源都是有限的,如果这样浪费很快会资源管理失控。常规的做法是起一个线程池,或者是进程池。 使用线程还是进程取决于你处理的信号的类型。如果计算量大,则需要进程池,如果只是设备等待,比如网络数据收发,则线程也勉强够用。信号过...

  •  翡希信息咨询 学习Python用哪个版本好

    学习Python,推荐使用Python 3.5版本或更高版本。以下是推荐该版本的主要原因:广泛支持:Python 3.5及更高版本已经得到了广泛的社区支持和维护,这意味着你可以轻松找到大量的教程、文档和社区帮助。库和框架的兼容性:大多数现代的Python库和框架都支持Python 3.5及更高版本。这些库和框架包括数据处理...

檬味博客在线解答立即免费咨询

Python相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部