GIL全局锁和线程里锁的差别

GIL全局锁和线程里锁的差别

python执行时,为了线程之间数据的一致性和安全,所以加了全局锁GIL,这个全局锁导致 线程成了单线程,也就是 相当于给线程加了锁(acquire和release),那请问线程里面的lock还有什么用?
在示范的时候,我们看到的python就是多线程哇,这到底是怎么一回事呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好!

1、锁的目的是为了保护共享的数据,同一时间只能有一个线程来修改共享的数据。GIL保证了一个进程内有多个线程,只有一个线程执行。

2、由于GIL的存在,导致python的多线程比单线程还慢,主要原因是在单核的时候,同时只有一个线程在执行CPU,所以这个线程总是能获取到GIL。而换到多核的时候,同时会有多个线程在不同的CPU核心上执行,此时不同线程之间就需要竞争GIL,而GIL只能同时被一个线程申请到,所以会导致其它线程处于闲置状态【即使它已经拥有了CPU资源】。所以Python在多核CPU上的多线程始终只有单线程在跑程序。

祝学习愉快!

  • 谢谢,大概明白了
    2022-04-04 14:12:21
  • 那为何启动了多线程后还是会比单线程程序执行的时间要短呢,既然到头来还是单线程在跑程序;

    2023-02-27 22:47:11
  • 同学,你好!多线程比单线程执行的快慢,也和执行的代码有关,并不能保证多线程一定比单线程快或者慢。

    祝学习愉快!

    2023-02-28 10:07:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师