GIL(全局解释器锁)
Posted 丫丫625202
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIL(全局解释器锁)相关的知识,希望对你有一定的参考价值。
1、互斥锁:局部并行改串行,牺牲效率保证数据安全
2、不同的数据需用不同的锁
一个进程中多线程,只能由单核处理,多核优势处理需开多进程。
垃圾回收线程不是随时都在
因GIL锁的原因,一个进程内多个线程同时只能有一个线程执行代码,也就失去了多核优势。
3、python多线程应该怎么用?
对计算来说,cpu越多越好,但是I/O操作来说,CPU再多也无用。
计算密集型应该用多进程,I /O密集型多线程。
计算密集型多进程与多线程对比:
多进程,耗时11.876922607421875秒:
from multiprocessing import Process 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(4): p=Process(target=work) l.append(p) p.start() for i in l: i.join() stop=time.time() print(\'run time is %s\' % (stop-start))
多线程计算,耗时29.74070429801941秒:
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(4): p=Thread(target=work) l.append(p) p.start() for i in l: i.join() stop=time.time() print(\'run time is %s\' % (stop-start))
I/O密集型多进程与多线程对比:
多进程,耗时3.7秒
from multiprocessing import Process import os import time def work(): time.sleep(2) if __name__ == "__main__": l=[] start=time.time() for i in range(400): p=Process(target=work) l.append(p) p.start() for i in l: i.join() end=time.time() print("run time is:%s" % (end-start))
多线程,耗时2.1秒
from threading import Thread import time def work(): time.sleep(2) if __name__ == "__main__": l=[] start=time.time() for i in range(400): p = Thread(target=work) l.append(p) p.start() for i in l: i.join() end=time.time() print("run time is:%s" % (end-start))
以上是关于GIL(全局解释器锁)的主要内容,如果未能解决你的问题,请参考以下文章