我有以下代码:import time
from threading import Thread
from multiprocessing import Process
def fun1():
for _ in xrange(10000000):
print 'in fun1'
pass
def fun2():
for _ in xrange(10000000):
print 'in fun2'
pass
def fun3():
for _ in xrange(10000000):
print 'in fun3'
pass
def fun4():
for _ in xrange(10000000):
print 'in fun4'
pass
if __name__ == '__main__':
#t1 = Thread(target=fun1, args=())
t1 = Process(target=fun1, args=())
#t2 = Thread(target=fun2, args=())
t2 = Process(target=fun2, args=())
#t3 = Thread(target=fun3, args=())
t3 = Process(target=fun3, args=())
#t4 = Thread(target=fun4, args=())
t4 = Process(target=fun4, args=())
t1.start()
t2.start()
t3.start()
t4.start()
start = time.clock()
t1.join()
t2.join()
t3.join()
t4.join()
end = time.clock()
print("Time Taken = ",end-start)
'''
start = time.clock()
fun1()
fun2()
fun3()
fun4()
end = time.clock()
print("Time Taken = ",end-start)
'''
我用三种方式运行上述程序:第一个单独的顺序执行(查看注释的代码并注释上面的代码)
单独执行第二个多线程
单独执行第三个多处理
结束时间-开始时间的观察结果如下:
总运行时间('Time taked=',342.5981313667716)——线程执行的运行时间
('Time taked=',232.94691744899296)——顺序执行的运行时间
('Time taked=',307.91093406618216)——多处理执行的运行时间
问题:
我发现顺序执行花费最少的时间,而多线程则花费最多的时间。为什么?我无法理解,也很惊讶结果。请澄清。在
因为这是一个CPU密集型的任务,而GIL是后天习得的,我的理解是
多处理所需时间最少,而线程执行所需时间最高时间。拜托验证我的理解。在