GIL全局解释器锁+GIL全局解释器锁vs互斥锁+定时器+线程queue+进程池与线程池(同步与异步)

以多线程为例写个互斥锁

from threading import Thread ,Lock
import time
mutex = Lock()

n = 100

def task():
global n
with mutex:
temp = n
time.sleep(0.1)
n= temp-1


if __name__ == '__main__':
t_l = []
start_time = time.time()
for i in range(100):
t = Thread(target=task)
t_l.append(t)
t.start()


for t in t_l:
t.join()
stop_time = time.time()
print(n)
print(stop_time-start_time)

1.GIL(这里是Cpython解释器独有的):本质就是互斥锁,程序中修改共享数据就应该用互斥锁来解决。
互斥锁是阻止多个任务同时运行,同一进程下的多个线程只能运行一个。
都是阻止多个并发线程同一时间只能有一个运行。
即:有了GIL的存在,同一进程内的多个线程同一时刻只能有一个运行,意味着Cpython解释器在一个进程下的多个线程无法实现并行,,意味着无法利用多核优势
但不影响并发的实现


2.为何要有GIL?
因为python解释器自带垃圾回收机制不是线程安全的
GIL可以被比喻成执行权限,同一线程下的所有线程都想要执行,都需要先抢执行权限


如何用?
GIL相当于执行权限,会在任务无法执行的情况下,就强行释放

posted @ 2018-11-13 16:49  张仁国  阅读(119)  评论(0编辑  收藏  举报
目录代码