05-爬虫进阶_多线程(03 GIL全局解释器锁)

GIL全局解释器锁:


Python自带的解释器是Cpython。CPytnon解释器的多线程实际上是一个假的多线程(在多核CPU中,只能利用一核,不能利用多核),同一时刻只有一个线程在执行,为了保证同一时刻只有一个线程在执行,在Cython解释器中有一个东西叫GIL(Global Intepreter Lock),叫做全局解释器锁,这个解释器锁是有必要的,因为Cpython解释器的内存管理不是线程安全的。当然除了Cpython解释器,还有其他的解程器,有些解拜释是没有GIL的,见下面:
1、Dythen:用Java实观的Python解释器,不存在GIL锁。
2、Ironbython:用.net实现的Python释器,不存在GL锁。
3、Pypy:用python实现的Python释容,存在GIL锁。
GIL虽然是一个假的多线程,但是在处理一些IO操作(比如文件读写和网络请求)还是可以在很大程度上提高效率的。在IO操作上建议使用多线程提高效率,在一些CPU计算操作上不建议使用多线程,而建议使用多进程。

 

  • IO操作建议使用多线程(也可以提高效率):同一时刻只有一个线程在执行(只是分别在各cpu的各线程快速切换)【GIL锁】

 

  • cpu计算操作建议使用多进程:(耗费资源比较多) 

 ———————————————————————————————————————————

GIL锁更为易理解的介绍:

计算机有4核,代表着同一时间,可以干4个任务。如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的。但是单核永远肯定时串行的,它肯定是串行的,cpu真正执行的时候,因为一会执行1,一会执行2.。。。。正常的线程就是这个样子的。但是,在python中,无论有多少核,永远都是假象。无论是4核,8核,还是16核.......不好意思,同一时间执行的线程只有一个(线程),它就是这个样子的。这个是python的一个开发时候,设计的一个缺陷,所以说python中的线程是假线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值