GIL全局解释器锁,每个线程在执行的过程中都需要先获取GIL,保证同一时刻只有一个线程在运行,目的是解决多线程同时竞争程序中的全局变量而出现的线程安全问题。
- 计算密集型:用多进程
import os
import time
from multiprocessing import Process
from threading import Thread
def work():
res = 0
for i in range(10000):
res *= i
if __name__ == '__main__':
l = []
print(os.cpu_count()) # 本机为4核
start = time.time()
for i in range(8):
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))
- IO密集型:用多线程
import os
import time
from multiprocessing import Process
from threading import Thread
def work():
time.sleep(2)
if __name__ == '__main__':
l = []
print(os.cpu_count()) # 本机为4核
start = time.time()
for i in range(400):
# 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))