Python全局解释器锁GIL与多线程

Python中如果是 I/O密集型的操作,用多线程(协程Asyncio、线程Threading),如果I/O操作很慢,需要很多任务/线程协同操作,用Asyncio,如果需要有限数量的任务/线程,那么使用多线程。
如果是CPU密集型操作,用多进程(multeprocessing)。

一、GIL

GIL(Global Interpreter Lock,即全局解释器锁),Python实质上并不存在真正的多线程,只有一个主线程在调度,由于GIL采用轮流运行线程的机制,GIL需要在线程之间不断轮流进行切换,线程如果较多或运行时间较长,切换带来的性能损失可能会超过单线程。

二、CPython引进GIL的主要原因是:

  1. 设计者为了规避类似内存管理这样的复杂竞争风险问题(race condition);
  2. CPython大量使用C语言库,但大部分C语言库都不是线程安全的(线程安全会降低性能和增加复杂度)。

三、绕过GIL的两种思路:

  1. 绕过CPython,使用JPython等别的实现;
  2. 把关键性能代码放到其他语言中实现,比如C++

四、线程、进程、协程

  • 线程、进程——把内部资源、任务调度交给底层的CPU后者内核来处理。
  • 协程 类似线程&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛一枚~

您的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值