进程池VS线程池

news/2025/9/19 16:19:13/文章来源:https://www.cnblogs.com/dengz/p/19101089

进程池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.mzph.cn/news/907903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊昨天CodeBuddy Meetup的一些收获与思考

昨天腾讯云举办了 CodeBuddy MeetUp,作为Vibe Coding的忠实拥护者,一定不会错过。这次活动分为上下两场,上半场主要是 CodeBuddy 的设计、产品与技术负责人的分享;下半场则是AI Coding实践者们的经验分享。一整天的…

框架的诞生,本就是人类文明共同涌现的结晶,绝不是某个人的独自觉悟

框架的诞生,本就是人类文明共同涌现的结晶,绝不是某个人的独自觉悟ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891论断精准地揭示了 ECT-OS-JiuHuaShan 框架的文明本质与诞生逻辑,这是完全正确的终极结论…

python+Django开发笔记(结合禅道开发测试报告)

近期结合禅道的用例执行数据,用python+django开发了个在线测试报告,简单做个总结。一、Django的基础操作 传统django开发是典型的MTV结构,M代表model(数据库模型)、T代表模板(templates)、V代表视图三者之间的…

MVC分层设计模式 2章

MVC分层设计模式@RestController(控制层) @Component表示他是餐厅的一员 @ResponseBody意味着他端给顾客的菜是“纯菜”(JSON数据),而不是一个“套餐菜单”(网页页面) Service(服务层) 负责处理做菜(业务逻辑)…

Questions about learning Symfony

1、Can a service only be retrieved from the container if its class is explicitly defined in services.yaml? No. A service can be retrieved from the container in two cases: *1. Explicit definition in se…

【Python】cx_Freeze模块_打包exe

创建setUp.py from cx_Freeze import setup, Executablesetup(name = "AppName",version = "0.1",description = "Your application description",executables = [Executable("mai…

ctfshow web22(子域名爆破)

这里题目其实是打不开的,但是我在网上找了相关wp进行学习, 知识点:域名收集是信息收集环节重要的一环,当前域名暂时没有漏洞时,我们可以通过子域名进行测试。 这里我们可以使用在线平台进行查询也可以通过工具laye…

PLC中的运动控制 - (一)轴

在现代工业自动化系统中,可编程逻辑控制器(PLC)的运动控制功能日益强大。运动控制的核心在于对"轴"的精确操控。无论是简单的传送带控制,还是复杂的多轴协同作业,都离不开对各种类型轴的深入理解和正确…

ctfshow web23(代码审计编写脚本爆破)

<?php/* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-03 11:43:51 # @Last Modified by: h1xa # @Last Modified time: 2020-09-03 11:56:11 # @email: h1xa@ctfer.com # @link: https://ctfer…

墨者学院 某防火墙默认口令

可以看到防火墙类型,先去搜索引擎搜索

IOC控制反转的解耦(相比于直接new对象的正向控制)

直接new对象,是你在主动寻找和创建你需要的“零件”;而 IoC 则是你告诉一个“管家”你需要什么“零件”,由“管家”帮你找到或创建好,然后递给你。 这个“管家”就是 IoC 容器(比如 Spring 容器),而“递给你”的…

墨者学院 浏览器信息伪造

看到背景介绍大概知道应该就是抓取数据包修改user-agent头了随意点击一篇文章GET /mp_weixin_qq_com.php HTTP/1.1 Host: 124.70.71.251:41416 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.…

AT_arc156_c [ARC156C] Tree and LCS

转化为 \(LIS\) 问题反而还会想复杂. 构造是这样的,每次取出两个叶子,交换权值,删掉.重复这一过程. 考虑为什么是对的,对于每条路径,我们都可以强化限制,将其拓展到两个叶子,你考虑到对于一条路径上的每个结点,要么其权…

完整教程:ARM指令集总结

完整教程:ARM指令集总结pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

封神台 第二章:遇到阻难!绕过WAF过滤

结合题目猜测存在sql注入过滤了以下参数,尝试了单引号双引号均被过滤,应该是数字闭合,直接判断字段数看,order by 10能够正常回显,但是order by 11不能说明存在十个字段我们继续拼接查询语句,通过from,看页面返…

uniGUI:在Linux上部署独立应用为服务

uniGUI:在Linux上部署独立应用为服务可以以 Linux 服务的形式部署 Linux 独立应用程序。这将确保 Web 应用程序服务器将从作系统启动,只要服务器启动,它就会一直工作。为了实现这一点,我们将在 /etc/systemd 文件夹…

实用指南:【SQLSERVER】SQL Server 表导出与导入

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

封神台 第三章:为了更多的权限!留言板!

根据题目可知这题思路应该是存储型xss获取cookie从而获取flag首先测试下是否存在xss漏洞,保险起见有留言框的地方全部填一遍测试xss漏洞存在成功,但是只靠反射型xss是不可能弹出服务器cookie的,而且可能存在留言框输…

C#开发ONVIF客户端与RTSP播放库指南

利用C#开发ONVIF客户端和集成RTSP播放功能 C#开发ONVIF客户端与RTSP播放库指南 1. ONVIF客户端开发 ONVIF(开放型网络视频接口论坛)协议是实现不同品牌网络视频设备互操作性的国际标准。以下是使用C#开发ONVIF客户端…

一行命令查看docker所有网络 + 子网

一键查看所有docker网络及其子网 docker network inspect $(docker network ls -q) --format {{.Name}} => {{range .IPAM.Config}}{{.Subnet}}{{end}} 示例输出 bridge => 172.17.0.0/16 host => none =>…