当前位置: 首页 > 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.gsyq.cn/news/8056.html

相关文章:

  • python+Django开发笔记(结合禅道开发测试报告)
  • Questions about learning Symfony
  • ctfshow web22(子域名爆破)
  • PLC中的运动控制 - (一)轴
  • ctfshow web23(代码审计编写脚本爆破)
  • 完整教程:ARM指令集总结
  • 封神台 第二章:遇到阻难!绕过WAF过滤
  • uniGUI:在Linux上部署独立应用为服务
  • 一行命令查看docker所有网络 + 子网
  • Salesforce 管理员:是终点,还是跳板?
  • 2025CCPC邀请赛(南昌)VP(A,B,C,D,G,H,K,L)
  • vLLM常用参数解释
  • k8s学习笔记8——Service
  • 读书笔记:索引组织表(IOT):让数据库查询飞起来的黑科技
  • Docker是什么?最全Docker使用教程(小白到高手) - 实践
  • 408学习之c语言(结构体) - 教程
  • TDMQ CKafka 版客户端实战指南系列之一:生产最佳实践
  • 完整教程:MySQL并发问题解析
  • 从“被动监控”到“主动优化”:MyEMS 重构能源管理价值的路径
  • 为什么企业需要高防IP - 详解
  • 论文解读-《Graph Retrieval-Augmented Generation A Survey》 - zhang
  • AI编程问题处理与传统网页搜索对比分析
  • WPF Canvas 网格线背景样式
  • 常见开源安全工具列表
  • 天使美容 V2 微信小程序管理系统:美业数字化运营新选择
  • 接龙大师微信小程序管理系统:一站式社群信息收集与活动管理解决方案
  • YOLOv7安全评估揭示11个漏洞:RCE攻击与模型差异风险
  • 从零开始:C# 拼音首字母搜索、字符串编码、关键词高亮的原理即实现考虑
  • 【完整源码+数据集+部署教程】机器人足球场景分割环境: yolov8-seg-C2f-DCNV2
  • 信号处理相关