需要分情况
情况1
单个CPU
多个CPU
情况2
IO密集型(代码有IO操作)
计算密集型(代码没有IO)1.单个CPU
IO密集型
多进程
申请额外的空间 消耗更多的资源
多线程
消耗资源相对较少 通过多道技术
ps:多线程有优势!!!
计算密集型
多进程
申请额外的空间 消耗更多的资源(总耗时+申请空间+拷贝代码+切换)
多线程
消耗资源相对较少 通过多道技术(总耗时+切换)
ps:多线程有优势!!!
2.多个CPU
IO密集型
多进程
总耗时(单个进程的耗时+IO+申请空间+拷贝代码)
多线程
总耗时(单个进程的耗时+IO)
ps:多线程有优势!!!
计算密集型
多进程
总耗时(单个进程的耗时)
多线程
总耗时(多个进程的综合)
ps:多进程完胜!!!
from threading import Thread
from multiprocessing import Process
import os
import time
defwork():# 计算密集型
res =1for i inrange(1,100000):
res *= i
if __name__ =='__main__':# print(os.cpu_count()) # 12 查看当前计算机CPU个数
start_time = time.time()# p_list = []# for i in range(12): # 一次性创建12个进程# p = Process(target=work)# p.start()# p_list.append(p)# for p in p_list: # 确保所有的进程全部运行完毕# p.join()
t_list =[]for i inrange(12):
t = Thread(target=work)
t.start()
t_list.append(t)for t in t_list:
t.join()print('总耗时:%s'%(time.time()- start_time))# 获取总的耗时"""
计算密集型
多进程:5.665567398071289
多线程:30.233906745910645
"""defwork():
time.sleep(2)# 模拟纯IO操作if __name__ =='__main__':
start_time = time.time()# t_list = []# for i in range(100):# t = Thread(target=work)# t.start()# for t in t_list:# t.join()
p_list =[]for i inrange(100):
p = Process(target=work)
p.start()for p in p_list:
p.join()print('总耗时:%s'%(time.time()- start_time))"""
IO密集型
多线程:0.0149583816528320
多进程:0.6402878761291504
"""
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)