繁体   English   中英

Windows(64位)上的Python 2.7.8(64位)是Ubuntu(64位)上的2.7.8(64位)的一半

[英]Python 2.7.8 (64bit) on Windows (64bit) is half as fast as 2.7.8 (64bit) on Ubuntu (64bit)

在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秒内完成了窗口。 谢谢大家,好奇心满意。

这是因为窗口中的大小,在窗口中,unix中的long32位,它是64位,因此您更快地达到Arbitrary-precision_arithmetic问题,分配成本更高。

相关问题为什么python的for循环对大输入非常线性

如果你单独对xrange进行基准测试,你会看到相当大的差异。

Windows使用LLP64的原因似乎是与32位代码的兼容性:

另一种替代方案是LLP64模型,它通过将int和long保留为32位来保持与32位代码的兼容性。 “LL”指的是“长整数”类型,在所有平台上至少为64位,包括32位环境。

取自wiki / 64-bit_computing

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM