cpu的核数和进程_Python 不同CPU核数对运行多进程和多线程的影响

本文对比了在腾讯云和阿里云服务器上,不同CPU核心数(4核8G vs 1核2G)对计算密集型和I/O密集型任务下多进程和多线程的影响。测试结果显示,对于计算密集型任务,多核CPU的多进程表现更优;而对于I/O密集型任务,多线程速度更快,但核心数差异影响不大。
摘要由CSDN通过智能技术生成

本文将通过腾讯云和阿里云上的服务器运行多进程和多线程实例来比较,不同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的差别并不明显

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值