1. 请看下面的例子:
import time
from threading import Thread
from multiprocessing import Process
from timeit import Timer
def countdown(n):
while n > 0:
n -= 1
def t1():
COUNT=100000000
thread1 = Thread(target=countdown,args=(COUNT,))
thread1.start()
thread1.join()
# COUNT = 100000000 # 100 million
# countdown(COUNT)
def t2():
COUNT=100000000
thread1 = Thread(target=countdown,args=(COUNT//2,))
thread2 = Thread(target=countdown,args=(COUNT//2,))
thread1.start(); thread2.start()
thread1.join(); thread2.join()
def t3():
COUNT=100000000
p1 = Process(target=countdown,args=(COUNT//2,))
p2 = Process(target=countdown,args=(COUNT//2,))
p1.start(); p2.start()
p1.join(); p2.join()
if __name__ == '__main__':
t = Timer(t1)
print 'countdown in one thread:',t.timeit(1)
t = Timer(t2)
print 'countdown use two thread:',t.timeit(1)

本文通过实例展示了Python的全局解释器锁(GIL)如何影响多线程性能,尤其是在多核CPU上的表现。尽管Python3.2后GIL有所改进,但仍然对I/O操作的响应速度造成影响。建议在面临多线程和数据共享挑战时,考虑使用Process代替Thread。了解更多关于GIL的知识,可以参考David Beazley的PyCon 2010演讲。
最低0.47元/天 解锁文章
71万+

被折叠的 条评论
为什么被折叠?



