所以我敲了一些测试代码,看看多处理模块与线程相比如何在 cpu 绑定工作上进行扩展。在 linux 上,我得到了预期的性能提升:
linux(双四核至强): serialrun 耗时 1192.319 毫秒 并行运行耗时 346.727 毫秒 线程运行耗时 2108.172 毫秒
我的双核 macbook pro 显示相同的行为:
osx (双核 macbook pro) serialrun 耗时 2026.995 毫秒 并行运行耗时 1288.723 毫秒 线程运行耗时 5314.822 毫秒
然后我去 Windows 机器上试了一下,得到了一些非常不同的结果。
窗户(i7 920): serialrun 耗时 1043.000 毫秒 并行运行耗时 3237.000 毫秒 线程运行耗时 2343.000 毫秒
为什么哦,为什么,Windows 上的多处理方法要慢得多?
这是测试代码:
#!/usr/bin/env python 导入多处理 导入线程 进口时间 def print_timing(func): def 包装器(*arg): t1 = time.time() res = func(*arg) t2 = time.time() print '%s 耗时 %0.3f ms' % (func.func_name, (t2-t1)*1000.0) 返回资源 返回包装 定义计数器(): 对于 xrange(1000000) 中的 i: 经过 @print_timing def 串行运行(x): 对于 xrange(x) 中的 i: 柜台() @print_timing 定义并行运行(x): 进程列表 = [] 对于 xrange(x) 中的 i: p = multiprocessing.Process(目标=计数器) proclist.append(p) p.start() 对于我在 proclist 中: 我加入() @print_timing def 线程运行(x): 线程列表 = [] 对于 xrange(x) 中的 i: t = threading.Thread(目标=计数器) 线程列表.append(t) t.start() 对于线程列表中的 i: 我加入() 定义主(): 串行运行(50) 并行运行(50) 线程运行(50) 如果 __name__ == '__main__': 主要的()