Python進程,線程

目錄

一、多任務

1.1定義

1.2具體體現

1.3并發和并行

1.3.1并發操作

1.3.2并行操作

1.3.3對比

二、進程

2.1概念

2.2特點

2.3進程狀態

2.4多進程

2.5多進程實現

2.6進程鎖

三、線程

3.1概念

3.2特點

3.3適用場景

3.4多線程實現

四、對比

4.1關系對?

4.2區別對?

4.3優缺點


一、多任務

1.1定義

多任務是指在同?時間內執行多個任務

1.2具體體現

多核處理器:真正并行執行多個任務,每個核心處理不同進程

CPU時間片輪轉:操作系統快速切換執行不同程序,給用戶同時運行多個程序的感覺

文檔編輯器實時保存文件同時進行拼寫檢查

瀏覽器同時加載多個網頁標簽

1.3并發和并行

多任務的兩種表現形式:并發和并行

1.3.1并發操作

指多個任務在同一時間段內交替執行,通過任務切換實現同時處理多個任務的效果。在單核CPU上也可以實現并發。

1.3.2并行操作

指多個任務真正同時執行,需要多個處理單元(如多核CPU)來實現,每個任務在不同的處理單元上同時運行。

1.3.3對比

二、進程

2.1概念

是計算機中正在運行的程序的一個實例,是操作系統進行資源分配和調度的基本單位。

2.2特點


獨立性:每個進程都有獨立的內存空間和系統資源
動態性:進程是程序的一次執行過程,具有生命周期
并發性:多個進程可以同時存在于系統中并并發執行
異步性:進程按各自獨立的、不可預知的速度向前推進

2.3進程狀態

2.4多進程

def fun_a():print('進行程序a')def fun_b():print('進行程序b')fun_a()
fun_b()

當我們需要執行上面代碼中的兩個任務進程的時候,同時進行可以大大增加效率

現在的進程執行順序:

采用多進程:

2.5多進程實現

1.導入進程multiprocessing包

2.通過進程類創建進程對象:進程對象 = multiprocessing.Process()
3.啟動進程執?任務:進程對象.start()

代碼實現:

# 導?多進程模塊,?于創建和管理進程
import multiprocessing
# 導?時間模塊,?于實現計時功能
import time
def music():for i in range(3):print('聽?樂...')time.sleep(0.2)
def coding():for i in range(3):print('敲代碼...')time.sleep(0.2)
if __name__ == '__main__':# 創建?個進程,?于執?名為music的函數music_process = multiprocessing.Process(target=music)# 創建另?個進程,?于執?名為coding的函數coding_process = multiprocessing.Process(target=coding)# 啟動music進程,使其開始執?music_process.start()# 啟動coding進程,使其開始執?coding_process.start()

由于是交替執行,無序,所以控制臺輸出的時候可能并不像我們想要的結果那樣一一交替運行,比如:

2.6進程鎖

我們可以通過進程鎖,來管理運行的權力,規定將運行的職權給一個功能后,進行堵塞,必須等待其運行完才能將運行的權利交給下一個功能

# 導?多進程模塊,?于創建和管理進程
from multiprocessing import Process, Lock
# 導?時間模塊,?于實現計時功能,導入進程鎖,將程序運行進行阻塞
lock = Lock()
import time
def music():for i in range(3):with lock:print('正在播放音樂...')time.sleep(0.2)
def coding():for i in range(3):with lock:print('敲代碼...')time.sleep(0.2)
if __name__ == '__main__':# 創建?個進程,?于執?名為music的函數music_process = Process(target=music)# 創建另?個進程,?于執?名為coding的函數coding_process = Process(target=coding)# 啟動music進程,使其開始執?music_process.start()# 啟動coding進程,使其開始執?coding_process.start()

此時多次運行測試發現,運行結果一致都是一一交替運行:

三、線程

3.1概念

線程(Thread)是操作系統能夠進行運算調度的最小單位,它被包含在進程之中,是進程中的實際運作單位。一個進程可以包含多個線程,這些線程共享進程的內存空間和系統資源。?

3.2特點

1. 輕量級
--線程是比進程更小的執行單位
--創建和切換開銷比進程小得多


2. 共享資源
--同一進程內的線程共享內存空間、文件句柄等資源
--線程間通信比進程間通信更高效


3. 獨立執行
--每個線程有獨立的執行路徑
--擁有獨立的棧空間和寄存器狀態


4. 并發執行
--多個線程可以并發執行
--提高程序執行效率和響應性


5. 同步需求
--多線程訪問共享資源時需要同步機制
--需要考慮線程安全問題
?

3.3適用場景

1. I/O密集型任務

文件讀寫、網絡請求等I/O操作

當一個線程等待I/O時,其他線程可以繼續執行

2. 并行計算

CPU多核環境下可實現真正的并行處理

大量獨立計算任務的并行執行

3. 用戶界面應用

提高UI響應性,避免界面卡頓

后臺任務與UI線程分離

4. 服務器應用

處理多個客戶端并發請求

Web服務器、數據庫服務器等

5. 實時系統

需要同時處理多個實時任務的場景

定時任務、監控系統等

3.4多線程實現

# 導?time模塊和threading模塊
import time
import threading
# 定義?個播放?樂的函數
def music():# 循環三次,每次打印聽?樂的狀態并暫停0.2秒for i in range(3):print('聽?樂...')time.sleep(0.2)
# 定義?個編碼的函數
def coding():# 循環三次,每次打印敲代碼的狀態并暫停0.2秒for i in range(3):print('敲代碼...')time.sleep(0.2)
# 程序??
if __name__ == '__main__':# 創建?個線程,?于播放?樂。通過threading.Thread類創建線程,music函數作為線程# 要執?的?標。music_thread = threading.Thread(target=music)# 創建?個線程,?于編碼?作。同樣使?threading.Thread類創建,coding函數作為線# 程序要執?的?標。coding_thread = threading.Thread(target=coding)# 啟動?樂線程和編碼線程music_thread.start()coding_thread.start()# 等待?樂線程完成其任務music_thread.join()# 等待編碼線程完成其任務coding_thread.join()print('程序結束')

四、對比

4.1關系對?

① 線程是依附在進程??的,沒有進程就沒有線程。

② ?個進程默認提供?條線程,進程可以創建多個線程

4.2區別對?

① 進程之間不共享全局變量

② 線程之間共享全局變量

③ 創建進程的資源開銷要?創建線程的資源開銷要?

④ 進程是操作系統資源分配的基本單位,線程是CPU調度的基本單位

4.3優缺點

① 進程優缺點:

優點:可以?多核

缺點:資源開銷?

② 線程優缺點

優點:資源開銷?

缺點:不能使?多核

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

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

相關文章

【Element Plus 表單組件樣式統一 CSS 文字特效實現指南】

Element Plus 表單組件樣式統一 & CSS 文字特效實現指南 前言 在使用 Element Plus 組件庫開發表單頁面時,我們遇到了一個看似簡單卻很有趣的問題:el-input、el-select 和 el-textarea 在禁用狀態下的文字顏色不一致。通過深入研究,我們…

網絡通信與協議棧 -- OSI,TCP/IP模型,協議族,UDP編程

網絡通信的核心是實現不同主機上進程間的數據交換,其技術體系圍繞 “協議分層模型” 展開,向下依賴硬件介質傳輸電 / 光信號,向上支撐各類網絡應用(如網頁瀏覽、文件傳輸)。本文結合 OSI 理論框架與 TCP/IP 工業標準&a…

HarmonyOS 新一代聲明式 UI 彈窗機制:從 AlertDialog 到 CustomDialogController 的深度解析與實踐

好的,請看這篇關于 HarmonyOS 新一代聲明式 UI 彈窗機制的技術文章。 HarmonyOS 新一代聲明式 UI 彈窗機制:從 AlertDialog 到 CustomDialogController 的深度解析與實踐 引言 在 HarmonyOS 應用開發中,彈窗(Dialog)是…

混合推理模型(快思考、慢思考模型)

目錄基礎transformer架構、transformers庫預訓練模型的微調(Fine-tuning)預訓練微調的大模型應用模式base 模型、instruct 模型區別Hugging Face 上如何查看base模型、instruct模型混合推理模型大模型里的快思考 vs 慢思考qwen3模型含特殊 ChatML / 模型…

prometheus+grafana搭建

部署 prometheus 安裝 # 1,下載 wget https://github.com/prometheus/prometheus/releases/download/v2.45.1/prometheus-3.5.0.linux-amd64.tar.gz# 2,部署 tar -zxvf prometheus-3.5.0.linux-amd64.tar.gz -C /opt/ cd /opt/ mv ./prometheus-3.5.0.linux-amd64 …

MR30分布式I/O在面機裝備中的應用

隨著食品加工行業向自動化、智能化轉型,面機裝備對控制系統的響應速度、布線靈活性及穩定性提出了更高要求。本案例以某大型食品機械制造企業的全自動面條生產線升級項目為背景,引入 MR30 分布式 IO 模塊替代傳統集中式 IO 方案。通過將 MR30 分布式 IO …

Matlab使用小技巧合集(系列四):Table類型高效用法與數據處理實戰

Matlab使用小技巧合集(系列四):Table類型高效用法與數據處理實戰 在科研數據處理和論文寫作過程中,結構化數據的管理極為重要。Matlab的table類型為研究生和科研人員提供了靈活、高效的數據存儲與處理方式,尤其適合實驗結果整理、分組統計、數據預處理等場景。本文將系統介…

STM32的時鐘系統與時鐘樹的配置

STM32的時鐘系統是其微控制器(MCU)的核心組成部分,負責為CPU、外設和存儲器等模塊提供精確的時序信號。其設計靈活且復雜,通過多級時鐘樹(Clock Tree)實現時鐘源的選擇、分頻和分配。以下是詳細介紹&#x…

NV 工具metrics分析(ncu, nsys/torch profiler)

以下分析都以A100硬件架構為例; Theoretical Max Active Warps per SM: 64 Register number: 512 (規定每個thread不能超過256) Theoretical Active Warps per SM [warp]:512//registers_per_thread*4, which defines theoretical active warp occupancy Waves P…

[CISCN2019 總決賽 Day2 Web1]Easyweb

登錄界面可以看到隨機切換的圖片。從頁面源碼中可以看到<div class"avtar"><img src"image.php?id3" width"200" height"200"/></div>&#xff0c;圖片文件的請求地址&#xff0c;并且有傳參id。web應用中像這種動…

第 3 講:KAFKA生產者(Producer)詳解

這是一篇既照顧入門也能給高級工程師提供落地經驗的實戰筆記。0. TL;DR&#xff08;先上結論&#xff09; 想穩&#xff1a;acksall 合理 retries&#xff1b;需要“分區內不重不丟”→ 再加 enable.idempotencetrue 且 max.in.flight<5。想快&#xff1a;適度增大 batch.s…

微信小程序截屏與錄屏功能詳解

微信小程序提供了豐富的API支持截屏和錄屏功能&#xff0c;適用于多種場景&#xff0c;如教育類應用的課程錄制、游戲類應用的精彩瞬間分享、電商類應用的商品展示等。以下將詳細介紹實現方法和應用案例。 截屏功能實現 截屏功能通過調用wx.canvasToTempFilePath或wx.captureSc…

React 中的 HOC 和 Hooks

寫在前面 在函數式組件主導的 React 項目中&#xff0c;高階組件&#xff08;HOC&#xff09;并非首選推薦&#xff0c;更建議優先使用 Hooks來實現復用邏輯。核心原因是 HOC 存在固有的設計缺陷&#xff0c;而 Hooks 能更優雅、簡潔地解決相同問題&#xff0c;同時避免 HOC 的…

【 蒼穹外賣 | Day2】

1. 相關視頻 Day2的全部視頻集數 2. 學習記錄 2.1 對象屬性拷貝 當DTO與實體類或者VO對象之間的一個裝換的時候&#xff0c;如果通過new創建對象&#xff0c;然后調用set方法進行屬性賦值&#xff0c;不夠方便&#xff0c;代碼不夠簡潔。當屬性過多時候&#xff0c;代碼就會…

焊接自動化測試平臺圖像處理分析-模型訓練推理

1、使用技術棧&#xff1a;jdk17/springboot/python/opencv/yolov8 2、JAVA環境搭建 JDK17下載安裝&#xff1a;wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 解壓軟件 tar -xf jdk-17.0.16_linux-x64_bin.tar.gz 配置全局變量 vim /etc/p…

【python實用小腳本-205】[HR揭秘]手工黨逐行查Bug的終結者|Python版代碼質量“CT機”加速器(建議收藏)

1. 場景故事 “作為HR&#xff0c;我曾用2小時逐行審閱50份Python簡歷項目&#xff0c;直到發現候選人的代碼復雜度超標導致線上事故…” → 轉折點&#xff1a;用麥凱布&#xff08;McCabe&#xff09;圈復雜度檢測腳本&#xff0c;30秒掃描全倉庫&#xff0c;現可100%攔截“高…

LeetCode - 1089. 復寫零

題目 1089. 復寫零 - 力扣&#xff08;LeetCode&#xff09; 思路 這道題我首先想到的是從前往后雙指針&#xff0c;但是這樣做會造成數據的覆蓋&#xff0c;比如說下面的這個情況 所以解決的方法就是從后往前去復寫&#xff0c;但是從后往前的話就要知道最后一個有效元素是…

c#中public類比博圖

簡單來說&#xff0c;**public 定義了“接口”或“引腳”**&#xff0c;就像你的FB塊上的 Input, Output, InOut 管腳一樣。它決定了外部的其他代碼&#xff08;如另一個FB或OB1&#xff09;可以看到和操作這個塊里的什么東西。讓我用你最熟悉的博圖概念來詳細類比一下。---###…

K8s基于節點軟親和的高 CPU Pod 擴容與優先調度方案

場景與目標 集群節點&#xff1a;master&#xff08;4 核&#xff09;、node1&#xff08;16 核&#xff09;、node2&#xff08;16 核&#xff09;。目標&#xff1a;將一個高 CPU 消耗的工作負載橫向擴展到 4 個實例&#xff0c;并通過**節點親和性&#xff08;軟親和&#…

MySQL InnoDB 的鎖機制

引言 鎖是數據庫管理并發訪問的另一種核心機制&#xff0c;與 MVCC 相輔相成。本文將系統梳理 MySQL InnoDB 中鎖的粒度、類型和工作原理&#xff0c;并深入探討它如何與事務隔離級別配合&#xff0c;共同保障數據的一致性和完整性。 一、 鎖的粒度&#xff1a;由粗到細 InnoD…