GIL全局解释器锁-2

欢迎指正

致力于自动化运维体系和运维技术的研究实践 | 青蛙兄blog

关注Python、GOlang语言在国内的推广、应用 | 青蛙兄blog

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的存在

未经允许不得转载:青蛙兄博客 » GIL全局解释器锁-2

赞 (4)

热门推荐