当前位置: 首页 > news >正文

进程池VS线程池

进程池VS线程池

# CPU 密集:大量纯计算(加解密、图像处理、数值分析)。需要真·多核并行来堆算力。 【进程】
# I/O 密集:大量等待(网络、磁盘、数据库)。CPU 大部分时间都在闲着,关键是别浪费“等”的时间。    【线程】
结果分析
#### 结果
I/O密集型:线程池进度: 100%|██████████| 3/3 [00:02<00:00,  1.00it/s]
I/O密集型:进程池进度: 100%|██████████| 3/3 [00:03<00:00,  1.02s/it]
I/O密集型任务: Thread线程池消耗时间: 3.01 结果: ['task0', 'task1', 'task2']
I/O密集型任务: Process进程池消耗时间: 3.1 结果: ['task0', 'task1', 'task2']
CPU计算型:线程池进度: 100%|██████████| 3/3 [00:00<00:00,  4.26it/s]
CPU计算型:进程池进度: 100%|██████████| 3/3 [00:00<00:00,  9.81it/s]
CPU计算型任务: Thread线程池消耗时间: 0.77 结果: [50000005000000, 50000005000000, 50000005000000]
CPU计算型任务 Process进程池消耗时间: 0.32 结果: [50000005000000, 50000005000000, 50000005000000]
示例代码
# -*- coding: utf-8 -*-
import time
from concurrent.futures import ThreadPoolExecutor
from concurrent.futures import ProcessPoolExecutorfrom tqdm import tqdm# --- 模拟IO操作 ---
def fake_io(idx):time.sleep(3)return f"task{idx}"# --- 模拟CPU计算 ---
# 或者如果需要保持循环结构但优化性能:
def fake_cpu_optimized(n):result = 0# 使用局部变量加速循环# 使用步长优化或向量化思想for i in range(1, n + 1):result += ireturn resultdef timmer(func):start_time = time.time()result = func()end_time = time.time()return round(end_time - start_time, 2), resultif __name__ == '__main__':# I/O : 线程池VS进程池子def io_with_threads():with ThreadPoolExecutor(max_workers=3) as executor:result = list(tqdm(executor.map(fake_io, range(3)), total=3, desc="I/O密集型:线程池进度"))return resultdef io_with_processes():with ProcessPoolExecutor(max_workers=3) as executor:result = list(tqdm(executor.map(fake_io, range(3)), total=3, desc="I/O密集型:进程池进度"))return resultt_thread_io, result_thread_io = timmer(io_with_threads)t_process_io, result_process_io = timmer(io_with_processes)print(f"I/O密集型任务: Thread线程池消耗时间: {t_thread_io} 结果: {result_thread_io}")print(f"I/O密集型任务: Process进程池消耗时间: {t_process_io} 结果: {result_process_io}")# CPU : 线程池VS进程池def cpu_with_threads():# 创建3个相同的计算任务tasks = [10000000] * 3  # 每个任务计算1千万with ThreadPoolExecutor(max_workers=3) as executor:# 使用tqdm显示进度results = list(tqdm(executor.map(fake_cpu_optimized, tasks),total=len(tasks),desc="CPU计算型:线程池进度"))return resultsdef cpu_with_processes():tasks = [10000000] * 3  # 每个任务计算1千万with ProcessPoolExecutor(max_workers=3) as executor:results = list(tqdm(executor.map(fake_cpu_optimized, tasks),total=len(tasks),desc="CPU计算型:进程池进度"))return results# 修改计时器函数以返回结果t_thread_cpu, thread_results = timmer(cpu_with_threads)t_process_cpu, process_results = timmer(cpu_with_processes)print(f"CPU计算型任务: Thread线程池消耗时间: {t_thread_cpu} 结果: {thread_results}")print(f"CPU计算型任务 Process进程池消耗时间: {t_process_cpu} 结果: {process_results}")
[学习指南]

https://zhuanlan.zhihu.com/p/1922709704695590980

http://www.hskmm.com/?act=detail&tid=9721

相关文章:

  • 聊聊昨天CodeBuddy Meetup的一些收获与思考
  • 框架的诞生,本就是人类文明共同涌现的结晶,绝不是某个人的独自觉悟
  • python+Django开发笔记(结合禅道开发测试报告)
  • MVC分层设计模式 2章
  • Questions about learning Symfony
  • 【Python】cx_Freeze模块_打包exe
  • ctfshow web22(子域名爆破)
  • PLC中的运动控制 - (一)轴
  • 墨者学院 某防火墙默认口令
  • IOC控制反转的解耦(相比于直接new对象的正向控制)
  • 墨者学院 浏览器信息伪造
  • AT_arc156_c [ARC156C] Tree and LCS
  • 完整教程:ARM指令集总结
  • 封神台 第二章:遇到阻难!绕过WAF过滤
  • 封神台 第三章:为了更多的权限!留言板!
  • 第一篇
  • C#开发ONVIF客户端与RTSP播放库指南
  • 一行命令查看docker所有网络 + 子网
  • ECT-OS-JiuHuaShan框架元推理,是马克思主义与我思故我在的完美统一,是超越自我
  • vulnhub Beelzebub
  • Salesforce 管理员:是终点,还是跳板?
  • 记一次内务培训
  • CH584 CH585 复位状态寄存器
  • 2025CCPC邀请赛(南昌)VP(A,B,C,D,G,H,K,L)
  • 不用手也能玩手机?多代理协作框架让 APP 自动执行任务
  • MATLAB实现单帧图像超分辨率重建
  • 绕过安全控制安装第三方软件
  • 详细介绍:认知语义学意象图式对人工智能自然语言处理中隐喻分析的影响与启示
  • 完整教程:LeetCode 刷题【81. 搜索旋转排序数组 II、82. 删除排序链表中的重复元素 II、83. 删除排序链表中的重复元素】
  • 软件体系结构概论 1章