GIL全局解释器锁-2

作者: 青蛙兄 分类: 高阶 发布时间: 2019-12-22 10:59

Python中绝大多数内置数据结构的读写都是原子操作

由于GIL的存在,Python的内置数据类型在多线程编程的时候就变成了安全的了,但是实际上他们本身不是线程安全类型的

保留GIL的原因

Guido坚持的简单哲学,对于初学者门槛低,不需要高深的系统知识也能安全,简单的使用Python,而且移除GIL,会降低CPython单线程的执行效率

测试下面2个程序  (CPU密集型)

import logging  
import datetime  
  
logging.basicConfig(level=logging.INFO,format='%(thread)s %(message)s')  
start = datetime.datetime.now()  
  
#计算  
def calc():  
    sum = 0  
    for _ in range(1000000000):  
        sum += 1  
  
calc()  
calc()  
calc()  
calc()  
calc()  
  
delta = (datetime.datetime.now() - start ).total_seconds()  
logging.info(delta)  

结果:

程序2

import logging,threading  
import datetime  
  
logging.basicConfig(level=logging.INFO,format='%(thread)s %(message)s')  
start = datetime.datetime.now()  
  
#计算  
def calc():  
    sum = 0  
    for _ in range(1000000000):  
        sum += 1  
  
lst = []  
for _ in range(5):  
    t = threading.Thread(target=calc)  
    t.start()  
    lst.append(t)  
  
for t in lst:  
    t.join()  
  
delta = (datetime.datetime.now() - start ).total_seconds()  
logging.info(delta)  

结果:

从两段程序测试的结果来看,Cpython中多线程根本没有任何优势,和一个线程执行时间相当,因为GIL的存在

发表评论

电子邮件地址不会被公开。