为什么这个python多线程方法比单个线程花费更多时间来解决同样的问题?
请注意,我的电脑是多核处理器cpu。
我用两种方式编写相同的代码并进行比较。令人惊讶的是单线程方式更快!有人有什么想法吗?
#!/usr/bin/python
L = [1,2,3,4,5,7,8,9,10]
def gen(index,value):
if index==len(L):
return 1
count=0
for i in range(len(value)+1):
count+=gen(index+1,value[:i]+[L[index]]+value[i:])
return count
#Single thread approach
print gen(1,[1]) #this takes 480ms to run!
#Multi-thread approach
from threading import Thread
def t1_start():
global pointer1
pointer1=gen(2,[2,1])
def t2_start():
global pointer2
pointer1=gen(2,[1,2])
pointer1=0
pointer2=0
t1=Thread(target=t1_start,args=())
t2=Thread(target=t2_start,args=())
t1.start()
t2.start()
t1.join()
t2.join()
#print pointer1+pointer2 #this takes 650ms to run!
答案 0 :(得分:1)
我在Java中遇到过这个问题。 用户建议,线程创建成本的开销正在放缓,以至于花费的时间更长。 我建议你尝试使用非常复杂的计算和你的gen(索引,值)函数中更多数字的线程代码。 如果gen函数需要更多时间,那么线程代码可能比简单的解决方案更好。