在Linux上它需要1.09171080828秒。
在Windows上,它需要2.14042000294秒。
基准代码:
import time
def mk_array(num):
return [x for x in xrange(1,num)]
def run():
arr = mk_array(10000000)
x = 0
start = time.time()
x = reduce(lambda x,y: x + y, arr)
done = time.time()
elapsed = done - start
return elapsed
if __name__ == '__main__':
times = [run() for x in xrange(0,100)]
avg = sum(times)/len(times)
print (avg)
我知道GIL创建了或多或少的单线程脚本。
Windows框是我的Hyper-V主机,但应该足够强大,以便在全部运行单线程脚本。 12核2.93Ghz Intel X5670s,72GB内存等
Ubuntu VM有4核和8GB内存。
两者都在运行Python 2.7.8 64位。
为什么窗户快一半?
编辑:我已经在0.010593495369秒内完成了两个零和linux的完成,并且在0.171899962425秒内完成了Windows。谢谢大家,好奇心满意。
答案 0 :(得分:3)
这是因为窗口中long的大小,在windows中,long
在unix中是32
位,它是64
位,所以你正在点击{{ 3}}问题越快,分配成本越高。
相关问题Arbitrary-precision_arithmetic
如果你单独对xrange进行基准测试,你会看到相当大的差异。
Windows使用LLP64的原因似乎是与32位代码的兼容性:
另一种替代方案是LLP64模型,它通过将int和long保留为32位来保持与32位代码的兼容性。 “LL”是指“long long integer”类型,在所有平台上至少为64位,包括32位环境。