为什么生成一个进程会使计算 运行 快两倍?

Why would spawning a process make computation run twice as fast?

以下计算在我的 Precision 5520 上大约需要 10.4 秒:

import time
before = time.time()
sum = 0
for i in range(1, 100000000):
    sum += i
print(time.time() - before, sum)

在同一台笔记本电脑上,以下只需要 5.2 秒:

import multiprocessing as mp
import time

def foo():
    before = time.time()
    sum = 0
    for i in range(1, 100000000):
        sum += i
    print(time.time() - before, sum)

mp.Process(target=foo).start()

这个结果是一致的。事实上,即使我 运行 cpu_count 同时处理,它也成立(加速因子略小)。

那么,为什么生成一个进程会使计算 运行 快两倍?

不是让计算变快的过程,而是运行在一个函数中进行计算。这是因为 全局变量访问比使用 CPython 解释器的局部变量访问慢 。如果你在同一个过程中简单地 运行 foo(),那么计算时间也会减少两倍。这是一个例子:

import time

def foo():
    before = time.time()
    sum = 0
    for i in range(1, 100000000):
        sum += i
    print(time.time() - before, sum)

# Slow (8.806 seconds)
before = time.time()
sum = 0
for i in range(1, 100000000):
    sum += i
print(time.time() - before, sum)

# Fast (4.362 seconds)
foo()

注意覆盖 built-in 函数 sum 有点危险,因为它可能会破坏使用它的代码并导致奇怪的错误。