python的多线程有一个GIL(全局解释器锁),使得多个线程,某一时刻只有一个线程发送给CPU处理。所以多线程不适用计算密集型应用,更适合IO密集型应用。
以下两次计算5000万次加法运算和不用多线程相比,没有效率的提升。因为CPU有上下文切换,甚至可能多线程更慢。
import time
import threading
def calc():
result = 0
for i in range(1, 50000001):
result += i
print(result)
if __name__ == '__main__':
start = time.time()
t1 = threading.Thread(target=calc)
t1.start()
t2 = threading.Thread(target=calc)
t2.start()
t1.join() # 挂起主进程,当t1线程执行完后才继续向下执行
t2.join()
end = time.time()
print(end - start)
网友评论