通俗版解釋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.pswp.cn/news/906044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906044.shtml
英文地址,請注明出處:http://en.pswp.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、傳感器、變頻器等工業設備…