码迷,mamicode.com
首页 > 编程语言 > 详细

Python 36 GIL全局解释器锁

时间:2018-09-07 19:17:51      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:color   无法   one   处理   性能测试   def   gif   多个   互斥锁   

一:GIL全局解释器锁介绍

CPython中,全局解释器锁(GIL)是一个互斥锁, 它阻止多个本机线程同时执行Python字节码。译文:之所以需要这个锁, 主要是因为CPython的内存管理不是线程安全的。(然而,由于GIL的存在, 其他特性已经变得依赖于它所执行的保证。)
1. 什么是GIL全局解释器锁
GIL本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一进程内的多个线程必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,即同一进程下的多个线程无法实现并行但是可以实现并发Cpython解释器下,如果想实现并行可以开启多个进程
2. 为何要有GIL
因为Cpython解释器的垃圾回收机制不是线程安全的
3. 如何用GIL
有了GIL,应该如何处理并发
技术分享图片
from threading import Thread
import time

def task(name):
    print(%s is running %name)
    time.sleep(2)

if __name__ == __main__:
    t1=Thread(target=task,args=(线程1,))
    t2=Thread(target=task,args=(线程1,))
    t3=Thread(target=task,args=(线程1,))
    t1.start()
    t2.start()
    t3.start()
View Code
 

二:多线程性能测试

 

技术分享图片
from multiprocessing import Process
from threading import Thread
import os,time

def work():
    res=0
    for i in range(100000000):
        res*=i

if __name__ == __main__:
    l=[]
    print(os.cpu_count())
    start=time.time()
    for i in range(6):
        # p=Process(target=work)
        p=Thread(target=work)
        l.append(p)
        p.start()
    for p in l:
        p.join()
    stop=time.time()
    print(run time is %s %(stop-start)) #4.271663427352905
计算密集型:应该使用多进程

 

技术分享图片
from multiprocessing import Process
from threading import Thread
import threading
import os, time


def work():
    time.sleep(2)


if __name__ == __main__:
    l = []
    start = time.time()
    for i in range(300):
        # p=Process(target=work) #2.225289821624756
        p = Thread(target=work)  # 2.002105951309204
        l.append(p)
        p.start()
    for p in l:
        p.join()
    stop = time.time()
    print(run time is %s % (stop - start))
IO密集型: 应该开启多线程

 

Python 36 GIL全局解释器锁

标签:color   无法   one   处理   性能测试   def   gif   多个   互斥锁   

原文地址:https://www.cnblogs.com/zedong/p/9606541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!