通俗版解释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.mzph.cn/news/906044.shtml

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

相关文章

用 VS Code / PyCharm 编写你的第一个 Python 程序

用ChatGPT做软件测试 编写你的第一个 Python 程序——不只是“Hello, World”,而是构建认知、习惯与未来的起点 “第一行代码,是一个开发者认知世界的方式。” 编程的入门,不只是运行一个字符串输出,更是开始用计算机思维来理解、…

amd架构主机构建arm架构kkfileview

修改本机使用镜像仓库地址 vim /etc/docker/daemon.json {“experimental”: true, “registry-mirrors”: [ “https://docker.m.daocloud.io”, “https://docker.1panel.live”, “http://mirrors.ustc.edu.cn/”, “http://mirror.azure.cn/”, “https://docker.hpcloud.c…

[Linux] vim及gcc工具

目录 一、vim 1.vim的模式 2.vim的命令集 (1):命令模式 (2):底行模式 3.vim配置 二、gcc 1.gcc格式及选项 2.工作布置 三、自动化构建工具makefile 1.基本使用方法 2.配置文件解析 3.拓展 在linux操作系统的常用工具中,常用vim来进行程序的编写&#xff1b…

数据库3——视图及安全性

视图及安全性 学习内容学习感受 学习内容 一、实验目的与要求: 1、设计用户子模式 2、根据实际需要创建用户角色及用户,并授权 3、针对不同级别的用户定义不同的视图,以保证系统的安全性 二、实验内容: 1、 先创建四类用户角色&…

Oracle数据库如何进行冷备份和恢复

数据库的冷备份指的是数据库处于关闭或者MOUNT状态下的备份,备份文件包括数据文件、日志文件和控制文件。数据库冷备份所用的时间主要受数据库大小和磁盘I/O性能的影响。由于数据库需要关闭才能进行冷备份,所以这种备份技术并不适用724小时的系统。尽管冷…

SAP HCM 0008数据存储逻辑

0008信息类型:0008信息类型是存储员工基本薪酬的地方,因为很多企业都会都薪酬带宽,都会按岗定薪,所以在上线前为体现工资体系的标准化,都会在配置对应的薪酬关系,HCM叫间接评估,今天我们就分析下…

FPGA在光谱相机中的核心作用

FPGA(现场可编程门阵列)作为光谱相机的核心控制与加速单元,通过硬件级并行处理能力和动态可编程特性,实现高速、高精度的光谱数据采集与处理。以下是其具体作用分类: 一、高速光电信号处理 ‌实时光谱复原‌ 通过硬…

入门OpenTelemetry——部署OpenTelemetry

OpenTelemetry 部署模式 OpenTelemetry Collector 按部署方式分为 Agent 和Gateway 模式。 Agent 模式 在 Agent 模式下,OpenTelemetry 检测的应用程序将数据发送到与应用程序一起驻留的(收集器)代理。然后,该代理程序将接管并…

Windows 上安装下载并配置 Apache Maven

1. 下载 Maven 访问官网: 打开 Apache Maven 下载页面。 选择版本: 下载最新的 Binary zip archive(例如 apache-maven-3.9.9-bin.zip)。 注意:不要下载 -src 版本(那是源码包)。 2. 解压 Mave…

摩方 12 代 N200 迷你主机(Ubuntu 系统)WiFi 抓包环境配置教程

摩方12代N200迷你主机标配 Intel AX201无线网卡,支持 WiFi 6 协议(802.11ax)及蓝牙5.2。此网卡兼容主流抓包工具,但需注意: 驱动兼容性:Ubuntu 20.04及以上内核版本(5.4)默认支持AX2…

轻量、优雅、高扩展的事件驱动框架——Hibiscus-Signal

在现代企业级应用中,事件驱动架构(EDA)已成为解耦系统、提升扩展性的利器。今天给大家推荐一个非常优秀的国产轻量级事件驱动框架 —— Hibiscus Signal,它不仅天然整合 Spring Boot,还提供完整的事件生命周期支持&…

集合-进阶

Collection collection的遍历方式 迭代器遍历 不依赖索引 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;public class mycollection {public static void main(String[] args) {//1.创建集合并添加元素Collection<String> co…

【八股战神篇】Java集合高频面试题

专栏简介 八股战神篇专栏是基于各平台共上千篇面经&#xff0c;上万道面试题&#xff0c;进行综合排序提炼出排序前百的高频面试题&#xff0c;并对这些高频八股进行关联分析&#xff0c;将每个高频面试题可能进行延伸的题目再次进行排序选出高频延伸八股题。面试官都是以点破…

Android之横向滑动列表

文章目录 前言一、效果图二、使用步骤1.xml布局2.代码3.HomeHxBean3.adapter4.item布局5.两个drawable 总结 前言 横向滑动列表有多种实现方式&#xff0c;也可以用tablayout&#xff0c;也可以用recyclerview&#xff0c;今天主要介绍recyclerview。 一、效果图 二、使用步骤…

关于物联网的基础知识(二)——物联网体系结构分层

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网的基础知识&#xff08;二&a…

【机器人】复现 WMNav 具身导航 | 将VLM集成到世界模型中

WMNav 是由VLM视觉语言模型驱动的&#xff0c;基于世界模型的对象目标导航框架。 设计一种预测环境状态的记忆策略&#xff0c;采用在线好奇心价值图来量化存储&#xff0c;目标在世界模型预测的各种场景中出现的可能性。 本文分享WMNav复现和模型推理的过程&#xff5e; 下…

英语学习5.17

attract &#x1f449; 前缀&#xff1a;at-&#xff08;朝向&#xff09; &#x1f449; 含义&#xff1a;吸引&#xff08;朝某处拉&#xff09; 例句&#xff1a;The flowers attract bees. &#xff08;花吸引蜜蜂。&#xff09; distract &#x1f449; 前缀&#xff…

【软考 McCabe度量法】

McCabe度量法&#xff08;McCabe’s Cyclomatic Complexity&#xff09;是由Thomas McCabe提出的一种用于衡量程序模块环路复杂性的软件度量方法。它通过分析代码的控制流结构来评估程序的复杂度&#xff0c;帮助开发者识别难以维护或测试风险较高的代码区域。 一、McCabe度量法…

解读 TypeScript 枚举Enum

TypeScript 枚举通过命名常量、类型安全和结构化组织&#xff0c;显著提升代码质量。使用时需根据场景选择合适的类型&#xff08;数字、字符串或常量枚举&#xff09;&#xff0c;并权衡性能与动态访问需求。掌握其特性和使用的场景&#xff0c;能在复杂项目中有效提升代码的可…

MODBUS RTU通信协议详解与调试指南

一、MODBUS RTU简介 MODBUS RTU&#xff08;Remote Terminal Unit&#xff09;是一种基于串行通信&#xff08;RS-485/RS-232&#xff09;的工业标准协议&#xff0c;采用二进制数据格式&#xff0c;具有高效、可靠的特点&#xff0c;广泛应用于PLC、传感器、变频器等工业设备…