本文将通过腾讯云和阿里云上的服务器运行多进程和多线程实例来比较,不同CPU数量对多进程和多线程的影响
测试环境如下:
- 服务器T:4核8G
- 服务器A:1核2G
测试一:计算密集型任务-多进程
采用如下的测试程序:
from multiprocessing import Process
import os, time
#计算密集型任务
def work():
res = 0
for i in range(100000000):
res *= i
if __name__ == "__main__":
l = []
print("本机为服务器T",os.cpu_count(),"核 CPU") # 本机为4核
start = time.time()
for i in range(4):
p = Process(target=work) # 多进程
l.append(p)
p.start()
for p in l:
p.join()
stop = time.time()
print("计算密集型任务,多进程耗时 %s" % (stop - start))
测试结果如下:
服务器T的结果:
本机为服务器T 4 核 CPU
计算密集型任务,多进程耗时 5.148967981338501
服务器A的结果:
本机为服务器A 1 核 CPU
计算密集型任务,多进程耗时 25.826696395874023
测试二:计算密集型任务-多线程
采用如下的测试程序:
from threading import Thread
import os, time
#计算密集型任务
def work():
res = 0
for i in range(100000000):
res *= i
if __name__ == "__main__":
l = []
print("本机为",os.cpu_count(),"核 CPU") # 本机为4核
start = time.time()
for i in range(4):
p = Thread(target=work) # 多线程
l.append(p)
p.start()
for p in l:
p.join()
stop = time.time()
print("计算密集型任务,多线程耗时 %s" % (stop - start))
服务器T的测试结果:
本机为 4 核 CPU
计算密集型任务,多线程耗时 20.67013120651245
服务器A的测试结果:
本机为 1 核 CPU
计算密集型任务,多线程耗时 26.10865044593811
测试三:I/O 密集型任务-多进程
采用测试程序如下:
from multiprocessing import Process
import os, time
#I/0密集型任务
def work():
time.sleep(2)
print("===>", file=open("tmp.txt", "w"))
if __name__ == "__main__":
l = []
print("本机为", os.cpu_count(), "核 CPU") # 本机为4核
start = time.time()
for i in range(400):
p = Process(target=work) # 多进程
l.append(p)
p.start()
for p in l:
p.join()
stop = time.time()
print("I/0密集型任务,多进程耗时 %s" % (stop - start))
服务器T的测试结果如下:
本机为 4 核 CPU
I/0密集型任务,多进程耗时 3.7599596977233887
服务器A的测试结果如下:
本机为 1 核 CPU
I/0密集型任务,多进程耗时 7.217377424240112
测试四:I/O 密集型任务-多线程
采用测试程序如下:
from threading import Thread
import os, time
#I/0密集型任务
def work():
time.sleep(2)
print("===>", file=open("tmp.txt", "w"))
if __name__ == "__main__":
l = []
print("本机为", os.cpu_count(), "核 CPU") # 本机为4核
start = time.time()
for i in range(400):
p = Thread(target=work) # 多线程
l.append(p)
p.start()
for p in l:
p.join()
stop = time.time()
print("I/0密集型任务,多线程耗时 %s" % (stop - start))
服务器T的测试结果:
本机为 4 核 CPU
I/0密集型任务,多线程耗时 2.084625482559204
服务器A的测试结果:
本机为 1 核 CPU
I/0密集型任务,多线程耗时 2.3506829738616943
测试结果分析
服务器T: 4核8G
服务器A: 1核2G
1、对于密集计算类型,多核CPU采取多进程方式优势明显,采取多线程方式多核CPU和单核CPU有差别,但没有多进程方式的差别明显;
2、对于IO密集型,多线程方式比多进程方式速度更快,但与多核CPU和单核CPU的差别并不明显