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

通俗版解释CPU、核心、进程、线程、协程的定义及关系

在这里插入图片描述

通俗版解释(比喻法)

1. CPU 和核心
  • CPU = 一个工厂(负责干活的总部)。
  • 核心 = 工厂里的车间(比如工厂有4个车间,就能同时处理4个任务)。
2. 进程
  • 进程 = 一家独立运营的公司(比如一家快递公司)。
    • 每个公司有自己的资金、仓库、员工(独立资源)。
    • 公司之间不能直接共享资源,要合作得打电话签合同(进程间通信)。
3. 线程
  • 线程 = 同一家公司里的员工(比如快递公司的快递员)。
    • 所有快递员共享公司的仓库和卡车(共享进程资源)。
    • 快递员之间可以直接沟通,但抢同一辆卡车时要排队(需要锁机制)。
4. 协程
  • 协程 = 一个超级快递员,能同时处理多个任务(比如一边送快递一边接电话)。
    • 这个快递员很聪明,遇到红灯就停下,先处理另一个任务(遇到I/O阻塞就切换)。
    • 但再厉害也只是一个人,没法变成两个快递员(无法利用多核)。

它们的关系

  • 层级结构
    CPU(工厂)→ 核心(车间)→ 进程(公司)→ 线程(员工)→ 协程(超级员工)

  • 举个生活场景
    假设你要同时完成 做饭接孩子放学

    • 多进程:雇两个保姆(一个专门做饭,一个专门接孩子)→ 完全独立,但成本高。
    • 多线程:一个保姆来回切换(先切菜,趁煮汤时跑出去接孩子)→ 省成本,但可能手忙脚乱。
    • 协程:保姆用超高效的时间管理(切菜时预热点火,等水开的间隙打电话确认孩子位置)→ 适合需要频繁切换的小任务。

Python中的典型场景

场景1:计算圆周率(CPU密集型)→ 用多进程
# 目标:用多核加速计算
from multiprocessing import Pool
import mathdef compute(n):# 模拟复杂计算(比如计算圆周率的一部分)return sum(math.sqrt(i) for i in range(n))if __name__ == "__main__":with Pool(4) as p:  # 开4个进程(对应4核CPU)result = p.map(compute, [10_000_000]*4)  # 4个任务并行print("总结果:", sum(result))  # 合并结果
场景2:下载10个网页(I/O密集型)→ 用协程
# 目标:同时等待多个网络请求
import asyncio
import aiohttpasync def download(url):async with aiohttp.ClientSession() as session:async with session.get(url) as response:print(f"{url} 下载完成,长度:{len(await response.text())}")async def main():urls = ["https://www.baidu.com"] * 10  # 10个相同网址tasks = [download(url) for url in urls]await asyncio.gather(*tasks)  # 同时发起所有下载asyncio.run(main())  # 总耗时 ≈ 下载1个网页的时间
场景3:边写文件边响应用户输入(简单多线程)
# 目标:不让写文件阻塞用户操作
import threadingdef save_to_file():# 模拟长时间写文件(比如写入1GB数据)with open("bigfile.txt", "w") as f:for _ in range(10_000_000):f.write("data\n")def listen_input():while True:cmd = input("输入命令:")if cmd == "exit":breakprint("执行命令:", cmd)# 启动两个线程
threading.Thread(target=save_to_file).start()
threading.Thread(target=listen_input).start()

终极总结表

适合场景Python模块优点缺点
多进程大量计算multiprocessing绕过GIL锁,真并行内存消耗大
多线程中等并发I/Othreading共享数据方便受GIL限制,不能加速计算
协程超高并发I/Oasyncio轻量级,代码简洁需要异步库支持

记住:计算用多进程,等I/O用协程,简单小任务用多线程。就像做饭时,煮汤(等I/O)时可以去切菜(协程切换),但没法一个人同时炒两锅菜(CPU计算)。

http://www.xdnf.cn/news/497359.html

相关文章:

  • 动态规划-64.最小路径和-力扣(LetCode)
  • c#车检车构客户管理系统软件车辆年审短信提醒软件
  • 系统架构设计(九):分布式架构与微服务
  • pytorch小记(二十二):全面解读 PyTorch 的 `torch.cumprod`——累积乘积详解与实战示例
  • Java求职面试:从核心技术到大数据与AI的场景应用
  • [Android] 安卓彩蛋:Easter Eggs v3.4.0
  • 第五项修炼:打造学习型组织
  • 前端基础之CSS
  • 大语言模型 11 - 从0开始训练GPT 0.25B参数量 MiniMind2 准备数据与训练模型 DPO直接偏好优化
  • 【诊所电子处方专用软件】佳易王个体诊所门诊电子处方开单管理系统:零售药店电子处方服务系统#操作简单#诊所软件教程#药房划价
  • Java 快速转 C# 教程
  • 30、WebAssembly:古代魔法——React 19 性能优化
  • 手撕四种常用设计模式(工厂,策略,代理,单例)
  • 设计模式Java
  • IDEA反斜杠路径不会显示JUnit运行的工作目录配置问题
  • 信奥赛-刷题笔记-栈篇-T2-P1981表达式求值0517
  • 在Maven中替换文件内容的插件和方法
  • 防范Java应用中的恶意文件上传:确保服务器的安全性
  • 【机器人】复现 WMNav 具身导航 | 将VLM集成到世界模型中
  • 结构化思考力_第一章_明确理念打基础
  • 西门子 Teamcenter13 Eclipse RCP 开发 1.2 工具栏 开关按钮
  • WPS JS宏实现去掉文档中的所有空行
  • 深入解析Spring Boot与Redis集成:高效缓存实践
  • Ansible模块——设置软件仓库和安装软件包
  • Python海龟绘图(Turtle Graphics)核心函数和关键要点
  • 【Linux网络】内网穿透
  • 当语言模型学会犯错和改正:搜索流(SoS)方法解析
  • 兰亭妙微:用系统化思维重构智能座舱 UI 体验
  • 【Redis】零碎知识点(易忘 / 易错)总结回顾
  • linux标准库头文件解析