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

CPU、核心、进程、线程、协程的定义及关系

在这里插入图片描述

CPU、核心、进程、线程、协程的定义及关系

1. CPU(中央处理器)
  • 定义:CPU是计算机的核心硬件,负责执行程序指令和处理数据。现代CPU通常包含多个物理核心(Core),每个核心可以独立执行指令,实现并行计算。
  • 核心(Core):CPU内的一个独立处理单元,多核CPU可同时执行多个任务。例如,4核CPU可并行处理4个线程。
2. 进程(Process)
  • 定义:进程是操作系统分配资源(如内存、文件句柄)的最小单位,每个进程拥有独立的地址空间,不同进程间资源隔离。
  • 特点
    • 进程创建和切换开销大(需切换内存地址空间、页表等)。
    • 进程间通信(IPC)复杂,需通过管道、共享内存等机制。
3. 线程(Thread)
  • 定义:线程是CPU调度的最小单位,属于进程内的执行单元。同一进程的多个线程共享进程的资源(如堆、全局变量),但每个线程有独立的栈和寄存器。
  • 特点
    • 线程切换开销较小(无需切换地址空间)。
    • 线程间可直接共享数据,但需同步机制(如锁)避免竞态条件。
4. 协程(Coroutine)
  • 定义:协程是用户态轻量级“线程”,由程序自身调度,无需内核参与。协程在单线程内通过协作式切换实现并发。
  • 特点
    • 切换开销极低(仅保存寄存器上下文)。
    • 无法利用多核,适合I/O密集型任务。
5. 层级关系
  • CPU → 核心 → 进程 → 线程 → 协程
    • 一个CPU包含多个核心。
    • 每个核心可运行一个进程或线程。
    • 一个进程包含多个线程,一个线程包含多个协程。

Python中的应用场景及案例

1. 多进程:CPU密集型任务
  • 场景:需要大量计算(如数值运算、图像处理),需利用多核并行。
  • 案例:使用multiprocessing模块加速亿次计算:
    from multiprocessing import Process
    import timedef compute():result = 0for _ in range(100_000_000):result += 1if __name__ == "__main__":processes = [Process(target=compute) for _ in range(4)]start = time.time()for p in processes:p.start()for p in processes:p.join()print(f"耗时: {time.time() - start:.2f}秒")  # 4核机器耗时约6秒
    
2. 多线程:I/O密集型任务
  • 场景:文件读写、网络请求等需等待外部资源的任务。
  • 案例:使用threading模块并发下载网页:
    import threading
    import requestsdef download(url):response = requests.get(url)print(f"下载完成: {url}")urls = ["http://example.com", "http://example.org"]
    threads = [threading.Thread(target=download, args=(url,)) for url in urls]
    for t in threads:t.start()
    for t in threads:t.join()
    
3. 协程:高并发I/O任务
  • 场景:高并发服务器、异步Web框架(如FastAPI)。
  • 案例:使用asyncio实现异步HTTP请求:
    import asyncio
    import aiohttpasync def fetch(url):async with aiohttp.ClientSession() as session:async with session.get(url) as response:return await response.text()async def main():urls = ["http://example.com", "http://example.org"]tasks = [fetch(url) for url in urls]results = await asyncio.gather(*tasks)for result in results:print(f"内容长度: {len(result)}")asyncio.run(main())
    
4. 混合方案:多进程+协程
  • 场景:超大规模I/O并发(如百万级请求)。
  • 思路:每个进程内运行协程,结合多核与高并发优势。

总结

  • CPU密集型:优先多进程(绕过GIL,利用多核)。
  • I/O密集型:多线程或协程(协程更轻量,适合超高并发)。
  • 协程优势:无需锁机制,代码简洁,适合异步编程。

实际开发中需根据任务类型选择模型,例如计算密集场景避免使用多线程(因Python的GIL限制),而高并发Web服务可结合协程与非阻塞I/O。

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

相关文章:

  • 基于DeepSeek API构建带记忆的对话系统:技术实现详解
  • 网络的知识的一些概念
  • 代码案例分析
  • 文件IO之标准IO
  • AGI大模型(23):LangChain框架快速入门之LangChain介绍
  • Linux基础指令
  • 目标检测评估指标mAP详解:原理与代码
  • Python文件IO、pip管理及内置模块实战解析
  • 编译原理--期末复习
  • 论文学习:《引入TEC - LncMir,通过对RNA序列的深度学习来预测lncRNA - miRNA的相互作用》
  • 王者荣耀游戏测试场景题
  • RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍
  • 20250518 强化命题
  • Vue3学习(Vue3.3新特性——defineOptions宏)
  • 基于 AT89C51 的多路智力竞赛抢答器设计与实现
  • 【ComfyUI】关于ComfyUI的一些基础知识和入门设置以及快捷键小技巧【简单易懂】
  • 【Vue篇】数据秘语:从watch源码看响应式宇宙的蝴蝶效应
  • etcd基础
  • 2026武汉门窗门业移门木门铝艺门智能锁展会3月国博举办
  • OpenCV-图像分割
  • 基于 STM32 的全自动洗车监控系统设计与实现
  • AI Agent开发第70课-彻底消除RAG知识库幻觉(4)-解决知识库问答时语料“总重复”问题
  • 【Linux网络编程】Socket编程-Socket理论入门
  • 【深度学习】#12 计算机视觉
  • 31、魔法生物图鉴——React 19 Web Workers
  • 系分论文《论信息系统缓存的分析和应用》
  • 从代码学习深度学习 - 近似训练 PyTorch版
  • 什么是着色器 Shader
  • fme条件属性值
  • 【LLIE专题】基于Retinex理论的transformer暗光增强