Python進程與線程的深度對比

一、核心概念對比

1. 進程(Process)

  • 操作系統級獨立單元:每個進程擁有獨立的內存空間(堆、棧、代碼段)

  • 資源隔離性:崩潰不影響其他進程

  • 多核并行:可充分利用多核CPU資源

2. 線程(Thread)

  • 進程內的執行單元:共享同一進程的內存空間

  • 輕量級并發:創建/切換成本低于進程

  • GIL限制:受Python全局解釋器鎖制約


二、關鍵技術差異對比表
對比維度進程線程
創建開銷高(需復制內存空間)低(共享現有內存)
數據共享IPC機制(隊列/管道)直接共享全局變量
上下文切換成本高(涉及內存切換)低(僅寄存器切換)
GIL影響可繞過GIL實現真并行受GIL限制偽并發
適用場景CPU密集型任務I/O密集型任務
異常影響范圍進程間隔離導致整個進程終止

三、Python實現機制解析

1. 多進程(multiprocessing模塊)

from multiprocessing import Process
import os
def task():print(f'子進程PID: {os.getpid()}')
if __name__ == '__main__':p = Process(target=task)p.start()p.join()
  • 特點:跨平臺實現,支持進程池

  • 內存消耗:約10MB+(取決于初始化狀態)

2. 多線程(threading模塊)

import threading
def task():print(f'當前線程: {threading.get_ident()}')
t = threading.Thread(target=task)
t.start()
  • 特點:GIL導致并發瓶頸

  • 內存消耗:約1MB級


四、性能對比實驗(計算密集型任務)
# 測試代碼片段
def heavy_calculation():sum(range(10**7))
# 多進程用時:2.1秒(4核)
# 多線程用時:8.3秒(偽并發)

五、最佳實踐指南
  1. 優先選擇進程的場景
  • 矩陣運算/機器學習訓練

  • 大規模數值計算

  • 需要內存隔離的任務

  1. 優先選擇線程的場景
  • Web請求處理

  • 文件讀寫操作

  • GUI應用保持響應

  1. 混合使用策略
   from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor# CPU密集型使用進程池with ProcessPoolExecutor() as proc_pool:proc_pool.map(cpu_task, data)# I/O密集型使用線程池with ThreadPoolExecutor() as thread_pool:thread_pool.map(io_task, urls)

六、進階注意事項
  1. 進程間通信成本
  • 隊列數據需要pickle序列化

  • 共享內存(Value/Array)的使用技巧

  1. 線程安全陷阱
  • Lock/RLock對共享資源的保護

  • 避免死鎖的上下文管理器用法

  1. 調試技巧
  • 使用top命令監控進程資源

  • threading.enumerate()查看活動線程


七、總結決策樹
是否需要真并行? → 是 → 使用多進程↓否
是否涉及I/O等待? → 是 → 使用多線程↓否
考慮協程(asyncio)

通過理解這些核心差異,可以更精準地根據任務特性選擇并發方案,充分發揮Python的并發編程潛力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79899.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django 入門指南:構建強大的 Web 應用程序

什么是 Django? Django 是一個開源的高層次 Python Web 框架,旨在快速開發安全且可維護的網站。它通過簡化常見的 Web 開發任務,幫助開發者專注于開發應用的核心功能。Django 實現了“快速開發”和“盡量少的重復”的理念,提供了…

ESP-ADF外設子系統深度解析:esp_peripherals組件架構與核心設計(顯示輸出類外設之IS31FL3216)

目錄 ESP-ADF外設子系統深度解析:esp_peripherals組件架構與核心設計(顯示輸出類外設之IS31FL3216)簡介模塊概述功能定義架構位置核心特性 IS31FL3216外設分析IS31FL3216外設概述IS31FL3216外設層次架構圖 IS31FL3216外設API和數據結構外設層…

【計算機網絡 | 第三篇】常見的網絡協議(二)

沒有看過我寫的關于網絡協議的第一篇博客可以看【計算機網絡 | 第二篇】常見的通信協議(一)-CSDN博客 TCP的三次握手和四次揮手 TCP三次握手 三次握手是TCP協議建立可靠連接的過程,目的是確保客戶端和服務端雙方的雙向通信能力正常&#x…

HAL庫(STM32CubeMX)——高級ADC學習、HRTIM(STM32G474RBT6)

系列文章目錄 文章目錄 系列文章目錄前言存在的問題HRTIMcubemx配置前言 對cubemx的ADC的設置進行補充 ADCs_Common_Settings Mode:ADC 模式 Independent mod 獨立 ADC 模式,當使用一個 ADC 時是獨立模式,使用兩個 ADC 時是雙模式,在雙模式下還有很多細分模式可選 ADC_Se…

Unity接入安卓SDK(3)厘清Gradle的版本

接入過程中,很多人遇到gradle的各種錯誤,由于對各種gradle版本的概念不甚了了,模模糊糊一頓操作猛如虎,糊弄的能編譯通過就萬事大吉,下次再遇到又是一臉懵逼。所以我們還是一起先厘清gradle的版本概念。 1 明晰概念 …

python-67-基于plotly的繪圖可視化和智能推薦圖表

文章目錄 1 各種圖表的適用場景1.1 面積圖1.2 餅圖1.3 散點圖1.3.1 散點1.3.2 散點加線1.4 折線圖1.5 箱線圖1.5.1 不同類別的箱線圖1.5.2 一個變量的箱線圖1.5.3 多個變量的箱線圖1.6 小提琴圖1.6.1 不同類別的小提琴圖1.6.2 一個變量的小提琴圖1.7 直方圖1.7.1 直方圖1.7.2 分…

Spring AI MCP

MCP是什么 MCP是模型上下文協議(Model Context Protocol)的簡稱,是一個開源協議,由Anthropic(Claude開發公司)開發,旨在讓大型語言模型(LLM)能夠以標準化的方式連接到外…

c++_csp-j算法 (3)

弗洛伊德算法(Floyd) Floyd算法又稱為插點法,是一種利用動態規劃的思想尋找給定的加權圖中多源點之間最短路徑的算法,與Dijkstra算法類似。該算法名稱以創始人之一、1978年圖靈獎獲得者、斯坦福大學計算機科學系教授羅伯特弗洛伊…

QT常見輸入類控件及其屬性

Line Edit QLineEdit用來表示單行輸入框,可以輸入一段文本,但是不能換行 核心屬性: 核心信號 信號 說明 void cursorPositionChanged(int old,int new) 當鼠標移動時發出此型號,old為先前位置,new為新位置 void …

【k8s系列1】一主兩從結構的環境準備

環境準備 虛擬機軟件準備及安裝,這里就不詳細展開了,可以看文章:【一、虛擬機vmware安裝】 linux環境準備及下載,下載鏡像centOS7.9,以前也有寫過這個步驟的文章,可以看:【二、安裝centOS】 開始進入正題…

【C++類和數據抽象】類的作用域

目錄 一、類的作用域基本概念 1.1 什么是類的作用域 1.2 作用域層次體系 1.3 類作用域的特點 1.4 基本訪問規則 二、訪問控制三劍客 2.1 public:開放接口 2.2 private:數據封裝 2.3 protected:繼承通道 2.4 跨作用域訪問示例 三…

opencv圖片顏色識別,顏色的替換

圖片顏色識別 1. RGB顏色空間2. 顏色加法2.1使用numpy對圖像進行加法2.2使用opencv加法(cv2.add) 3 顏色加權加法(cv2.addWeighted())4. HSV顏色空間5. 制作掩膜4. 與運算(cv2.bitwise_and)5.顏色的替換7 R…

ADC數據不穩定的解決方案

問題如圖: 解決方案:上圖第一個通道后來接入GND,就穩定了 上圖第一個通道后來接入VCC,就穩定了

Spark(18)Yarn-概述

Hadoop三大核心組件:HDFS、MapReduce和YARN 一)Yarn的概念 YARN(Yet Another Resource Negotiator,另一種資源協調者)是一個通用資源管理系統和調度平臺,可為上層應用提供統一的資源管理和調度。它的引入為集群在利用率,資源統一管…

Flowith AI,解鎖下一代「知識交易市場」

前言 最近幾周自媒體號都在瘋狂推Manus,看了幾篇測評后,突然在某個時間節點,在特工的文章下,發現了很小眾的Flowith。 被這段評論給心動到,于是先去注冊了下賬號。一翻探索過后,發現比我想象中要有趣的多&…

Maxscript調用Newtonsoft.Json解析Json

Maxscript調用Newtonsoft.Json解析Json_newtonsoft.json maxscript-CSDN博客

搭建用友U9Cloud ERP及UAP IDE環境

應用環境 Microsoft Windows 10.0.19045.5487 x64 專業工作站版 22H2Internet Information Services - 10.0.19041.4522Microsoft SQL Server 2019 - 15.0.2130.3 (X64)Microsoft SQL Server Reporing Services 2019 - 15.0.9218.715SQL Server Management Studio -18.6 laster…

github新建一個遠程倉庫并添加了README.md,本地git倉庫無法push

1.本地git倉庫與遠程倉庫綁定 2.push時報錯,本地的 main 分支落后于遠程倉庫的 main 分支(即遠程有更新,但你本地沒有),需要拉取遠程的倉庫--->在merge合并(解決沖突)--->push 3.但是git …

我用deepseek做了一個提取壓縮文件夾下pdf和word文件工具

由于最近需要把大量的壓縮文件的pdf和word文件統一復制到一個文件夾中。 我們一般正常操作方式的是把一個壓縮文件一個一個解壓,然后在把一個的解壓好的文件夾下文件復制到另外一個文件夾中。 這個也需太繁瑣了,從以往統計的需要花費兩個小時間&#x…

企業網絡安全合規風險高、運營不穩定,要怎么解決?

在數字化浪潮中,數據已然成為企業的核心資產,其重要性不言而喻。然而,數據泄露風險也時刻威脅著企業的生存與發展。不少企業在歷經數據泄露的慘痛教訓后,紛紛選擇部署數據防泄露系統。那么,企業部署數據防泄露系統前后…