我有以下代码:
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)
'''
我以三种方式运行上述程序:
>第一次顺序执行ALONE(查看注释代码并注释上面的代码)
>单独的第二次多线程执行
>单独的第三次多处理执行
end_time-start时间的观察结果如下:
总运行时间
>(‘Time Taken =’,342.5981313667716)—通过线程执行运行时间
>(‘Time Taken =’,232.94691744899296)—顺序执行的运行时间
>(‘Time Taken =’,307.91093406618216)—多处理执行的运行时间
题 :
我看到顺序执行花费的时间最少,多线程占用时间最长.为什么?我无法理解,也对结果感到惊讶.请澄清.
由于这是一项CPU密集型任务并且获得了GIL,我的理解是
线程执行需要花费最多时间,多处理将花费最少的时间.请验证我的理解.