我的笔记本有4个核心,在进行一些简单的测试后,我发现使用多进程处理4个或更多任务时,我的CPU使用率达到了100%,处理3个任务时为75%,处理2个任务时为50%,处理1个任务时为25%。这对我来说是非常合理的。
然后我发现在使用多进程时,我的程序执行速度比单进程快了4倍,但是我感觉它不应该总是快四倍。
例如,如果我运行5个任务,由于只有4个核心可用,那么我的第5个任务不应该被排队等待直到其中任何一个任务完成吗?换句话说,如果所有的任务都是相同的,并且每个任务需要T秒钟,那么如果没有使用多进程,它们需要5T秒才能处理完毕,那么使用4个核心进行拆分工作,它们不应该只需要2T的时间来处理吗?
然而,我的测试结果是使用多进程时需要5T/4的时间。我真的很好奇为什么,以下是我的测试代码:
import multiprocessing
import time
def worker(num):
print ("Worker"+str(num)+" start!")
for i in range(30000000):
abc = 123
print ("Worker"+str(num)+" finished!")
return
if __name__ == '__main__':
jobs = []
start = time.time()
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
jobs.append(p)
p.start()
# p.join()
for job in jobs:
job.join()
end = time.time()
print (end - start)
编辑: 在阅读@nneonneo的回答后,我想到了以下跟进问题:
如果我的5个作业需要完成的时间不同,分别是T、T、T、T和2T秒,并且操作系统调度器试图确保所有进程都获得平等的时间份额,那么T秒后,我的前4个作业应该已经完成了。然后只有一个核心能够处理最后一个作业,所以总时间将为T+T = 2T秒,对吗?总时间不再是6T / 4了。