python gil锁,多进程,多线程

因为GIL,python只有一个GIL,运行python时,就要拿到这个锁才能执行,在遇到I/O 操作时会释放这把锁。
在Python2中,如果是纯计算的程序,没有 I/O 操作,解释器会每隔100次操作就释放这把锁,让别的线程有机会 执行(这个次数可以通sys.setcheckinterval
来调整)同一时间只会有一个获得GIL线程在跑,其他线程都处于等待状态
1、如果是CPU密集型代码(循环、计算等),由于计算工作量多和大,计算很快就会达到100,然后触发GIL的释放与在竞争,多个线程来回切换损耗资源,所以在多线程遇到CPU密集型代码时,单线程会比多线程的快。
2、如果是I\O密集型代码(文件处理、网络爬虫),开启多线程实际上是并发(不是并行),IO操作会进行IO等待,线程A等待时,自动切换到线程B,这样就提升了效率,比单线程快很多

python GIL其实是功能和性能之间权衡后的产物,它尤其存在的合理性,也有较难改变的客观因素。

  1. 因为GIL的存在,只有IO密集型场景下的多线程会得到较好的性能,而在CPU密集型(计算密集型)或者高并发场景下,使用多进程效率会更快。
  2. GIL在较长一段时间内将会继续存在,但是会不断对其进行改进。
  3. GIL的全称是全局解释器锁, 也就是一个解释器一个锁,解释器也就是python.exe可执行文件,GIL的目的是确保每个进程中只有一个线程运行,所以多个进程之间是不会互相影响的,多进程确实可以用来削弱GIL的负面影响,但是对于IO密集型操作事务,多进程理论上也会比多线程快一点,但是因为多进程消耗的资源也比多线程大很多,所以说你只有少数的任务并发,你用多进程没有问题,但是并发任务多的情况而且是IO密集型操作,用多线程就比多进程好的多,毕竟多线程占用资源少,比多进程更加便于管理,多进程的管理比多线程要复杂而且不稳定。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qiyunge

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值