并發編程基礎概念

相關概念

并行

并行是指同一個時刻,多個任務同時進行。只有在多核CPU下才會發生。

并發

并發是指單個CPU在不同任務之間來換切換工作,但是同一時刻只有一個任務在工作。由于CPU的切換速度很快,給人的感受是多個任務在一起運行。

串行

串行是指單個CPU根據任務隊列順序執行任務,只有前面的任務完成后才會執行后面的任務。

進程

進程是程序在計算機中運行的具體實現。進程一般由程序段數據集控制塊組成。

  • 程序段是指任務的指令集
  • 數據集是指任務執行過程中需要的變量,函數,類等數據
  • 控制塊是記錄CPU處理任務時用到的控制模塊

在操作系統中進程使用pid(process identification)表示。pid由進程創建時,操作系統分配得到。并且在進程運行過程中pid不會發生改變。

 import os?# 獲取當前進程的pidprint(os.getpid())# 獲取當前進程的父進程pidprint(os.getppid())

線程

進程內的一個任務執行的獨立單元,是任務調度和系統執行的最小單位。

協程

用戶態的輕量級線程,協程的調度完全由用戶控制,主要為單線程下模擬多線程。

一個程序可以由一到多個進程,一個進程可以有一到多個線程,一個線程下可以有一到多個協程。

進程狀態

在操作系統創建進程,到銷毀進程的過程中,進程一般存在三個狀態就緒運行阻塞

  • 就緒:進程獲取了除CPU外的及其資源,一旦獲取CPU資源就可以工作的狀態
  • 運行:CPU在工作,且進程工作的狀態
  • 阻塞:CPU沒有工作,且進程工作的狀態,往往是在執行IO操作

同步/異步

同步和異步是多任務處理過程中的不同方式或手段。

同步

同步就是多任務發生時,系統按照任務順序依次執行,只有前面的任務結束后,才會執行后面的任務。

異步

異步就是多任務發生時,系統會以并行或并發的方式處理多任務,讓多任務之間不必相關等待。

案例說明

同步:某人去商場購買洗衣機然后回家做飯。她必須要等商場配好洗衣機后,然后帶著洗衣機,回家做飯。

異步:某人去商場相中洗衣機后,網上下單,然后回家做飯。此時她不需要等待商場配好洗衣機后才回家,網上下單后就可以直接回家了。

阻塞/非阻塞

阻塞和非阻塞是進程處于阻塞狀態時,CPU的工作方式。

阻塞

當任務處于阻塞時,CPU處于等待狀態,不能處理其他任務。

非阻塞

當任務處于阻塞時,CPU不必等待,能夠處理其他任務。

同步阻塞

當系統以同步方式處理多任務時,如果任務A發生了阻塞狀態,則任務A后面的所有任務都必須要等待任務A結束阻塞狀態,且完成后才能執行。

 import time??def taska():print("task a started")time.sleep(5)print("task a ended")??def taskb():print("task b started")time.sleep(5)print("task b ended")??if __name__ == "__main__":queue = [taska, taskb]for task in queue:task()

異步阻塞

當系統以異步方式處理多任務時,如果任務A發生阻塞狀態,系統需要等待,而不會切換至其他任務進行處理。

 """@Time: 2024/6/28 20:18@Author: 'Ethan'@Email: ethanzhou4406@outlook.com@File: 1. 同步阻塞.py@Project: python@Feature:"""import timeimport multiprocessing??def taska():print("task a started")time.sleep(5)print("task a ended")??def taskb():print("task b started")time.sleep(5)print("task b ended")?def taskc():print("task c started")time.sleep(5)print("task c ended")?if __name__ == "__main__":processa = multiprocessing.Process(target=taska)processb = multiprocessing.Process(target=taskb)processc = multiprocessing.Process(target=taskc)queue = [processa, processb, processc]for process in queue:process.start()process.join() # 阻塞?

同步非阻塞

當系統以同步方式處理多任務時,如果前面的任務A出現阻塞狀態,則后面的任務B不必等待,直接運行。

異步非阻塞

當系統以異步方式處理多任務時,如果前面的任務A出現阻塞狀態,則不需等待切換至任務B運行。

 """@Time: 2024/6/28 20:18@Author: 'Ethan'@Email: ethanzhou4406@outlook.com@File: 1. 同步阻塞.py@Project: python@Feature:"""import timeimport multiprocessing??def taska():print("task a started")time.sleep(5)print("task a ended")??def taskb():print("task b started")time.sleep(5)print("task b ended")?def taskc():print("task c started")time.sleep(5)print("task c ended")?if __name__ == "__main__":processa = multiprocessing.Process(target=taska)processb = multiprocessing.Process(target=taskb)processc = multiprocessing.Process(target=taskc)queue = [processa, processb, processc]for process in queue:process.start()

發布于 2024-06-28 21:30?IP 屬地江蘇

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

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

相關文章

Ansys Zemax|在設計抬頭顯示器(HUD)時需要使用哪些工具?

附件下載 聯系工作人員獲取附件 汽車抬頭顯示器或汽車平視顯示器,也被稱為HUD,是在汽車中顯示數據的透明顯示器,不需要用戶低頭就能看到他們需要的重要資訊。這個名字的由來是由于該技術能夠讓飛行員在頭部“向上”并向前看的情況下查看信息…

RocketMQ快速入門:linux安裝rocketmq并配置開機自啟(十一)

目錄 0. 引言1. 下載安裝包1.1 高版本直接下載安裝包1.2 下載源碼包進行編譯 2. namesrv和broker安裝2.1 安裝2.2 放開服務器端口2.3 測試 3. 配置開機自啟3.1 配置namesrv開機自啟3.2 配置broker開機自啟 0. 引言 之前我們針對本機電腦安裝rocketmq進行了講解,同時…

Java--回顧方法的定義

1.修飾符 public 公共的 修飾String類型 2.返回類型 返回的值得類型 返回值為String(字符串)類型 3.break continue return的區別 break,結束整個循環 continue,結束本次循環 return,結束整…

java用this語句調用構造方法

示例代碼如下: class Student7{private String name;private int age;public Student7(){System.out.println("調用了無參構造方法");}public Student7(String name,int age){this();this.namename;this.ageage;}public String read(){return"我是:…

遠程過程調用RPC實現原理

Hi~!這里是奮斗的小羊,很榮幸您能閱讀我的文章,誠請評論指點,歡迎歡迎 ~~ 💥💥個人主頁:奮斗的小羊 💥💥所屬專欄:C語言 🚀本系列文章為個人學習…

運算放大器輸出相位反轉和輸入過壓保護

運算放大器輸出電壓相位反轉 本教程討論兩個與運算放大器相關的話題:輸出相位反轉和輸入過壓保護。 超過輸入共模電壓(CM)范圍時,某些運算放大器會發生輸出電壓相位反轉問題。其原因通常是運算放大器的一個內部級不再具有足夠的偏置電壓而關閉&#xff…

昇思25天學習打卡營第4天|常見的數據變換 Transforms類型

導入數據集相關庫和模塊 首先導入了一些必要的庫和模塊,包括 numpy(np 是其常用的別名)、PIL 庫中的 Image 模塊,以及自定義的 download 模塊,還有 mindspore.dataset 中的 transforms、vision、text 模塊。然后使用 m…

C# 關于通訊觀察線程(2) -- 斷線重連

通訊觀察線程是個有意思,又是非常實用的功能。 斷線重連具體怎么實現呢,很多人都實現過,那么TouchSocket等幾個通訊組件中也包含有,都是可以拿來就用。只是,對于高級用戶和特別細節操作要求的,是會自定義特…

數字信號處理實驗三(IIR數字濾波器設計)

IIR數字濾波器設計(2學時) 要求: 產生一復合信號序列,該序列包含幅度相同的28Hz、50Hz、100Hz、150Hz的單音(單頻)信號;其中,50Hz及其諧波為工頻干擾(注:采樣…

Chrome Extension如何讓work flow在頁面刷新、跳轉繼續執行任務

從Electron到Chrome Extension:流程自動化的跨平臺探索 在之前的項目中,我使用Electron成功實現了一個流程自動化應用,它極大地提高了工作效率。然而,當面對Chrome擴展程序(Extension)的需求時,我意識到需要一種新的策略來應對瀏覽器環境下的限制。特別是Chrome Extens…

SII9134CTU HDMI發射芯片

SII9134 HDMI深彩色發射機是第三代高清晰度多媒體接口(HDMI)發射機,支持HDMI 1.3規范。 這款完全符合hdmi標準的設備提供了一種簡單、低成本的方法來發送受保護的數字音頻和視頻,為最終用戶提供真正的全數字體驗。AV接收器,以及藍光和HD DVD…

2024年6月27日,歐盟REACH法規新增第31批1項SVHC高關注物質

ECHA公布第31批1項SVHC,物質已增至241項 2024年6月27日,ECHA公布第31批1項SVHC,總數達241項。新增物質未包括磷酸三苯酯,仍在評議中。REACH法規要求SVHC含量超0.1%需告知下游,出口超1噸須通報ECHA。SCIP通報要求SVHC含…

MySQL84 -- ERROR 1524 (HY000): Plugin ‘msql_native_password‘ is not loaded.

【問題描述】 MySQL 8.4版本,配置用戶使用mysql_native_password認證插件驗證用戶身份,報錯: 【解決方法】(Windows, MySQL 8.4) 1、修改MySQL配置文件my.ini,在[mysqld]段添加mysql_native_passwordON。 2、管理員…

uni-app 自定義支付密碼鍵盤

1.新建最賤 payKeyboard .vue <template><view class"page-total" v-show"isShow"><view class"key-list"><view class"list" v-for"(item,index) in keyList" :class"{special:item.keyCode190…

LeetCode 53.最大子數組和(dp)

給你一個整數數組 nums &#xff0c;請你找出一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 子數組 是數組中的一個連續部分。 示例 1&#xff1a; 輸入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 輸出&#xff1a;…

《雁門太守行》

作者 李賀 【唐代】 全文&#xff1a; 黑云壓城城欲摧&#xff0c;甲光向日金鱗開。 角聲滿天秋色里&#xff0c;塞上燕脂凝夜紫。 半卷紅旗臨易水&#xff0c;霜重鼓寒聲不起。 報君黃金臺上意&#xff0c;提攜玉龍為君死。 提示&#xff1a; (塞上 一作&#xff1a;塞土) …

描述ifstream、ofstream和fstream類的用途

ifstream、ofstream和fstream是C標準庫<fstream>中提供的三個重要的文件流類&#xff0c;它們分別用于文件的讀取、寫入和讀寫操作。以下是這三個類的詳細用途描述&#xff1a; ifstream類&#xff08;輸入文件流類&#xff09;&#xff1a; 用途&#xff1a;ifstream類…

JavaScript:實現內容顯示隱藏(展開收起)功能

一、場景 點擊按鈕將部分內容隱藏&#xff08;收起&#xff09;&#xff0c;再點擊按鈕時將內容顯示&#xff08;展開&#xff09;出來。 二、技術摘要 js實現實現內容顯示隱藏js動態給ul標簽添加li標簽js遍歷數組 三、效果圖 四、代碼 js_block_none.js代碼 var group1 doc…

網工內推 | 網絡工程師,IE認證優先,最高18k*14薪,周末雙休

01 上海吾索信息科技有限公司 &#x1f537;招聘崗位&#xff1a;網絡工程師 &#x1f537;崗位職責&#xff1a; 1&#xff09;具備網絡系統運維服務經驗以及數據庫實施經驗&#xff0c;具備網絡系統認證相關資質或證書&#xff1b; 2&#xff09;掌握常用各設備的運維巡檢…

GESP 四級急救包(3):押題急救

常見算法攻克 一、素數1. 素數判斷2. 素數篩法 二、數據轉換1. 字符串轉換2. 進制轉換2.1 將 x x x 進制轉換為 10 10 10 進制2.2 將 10 10 10 進制轉換為 x x x 進制 三、字符串1. 字符串替換2. 其他題目 一、素數 1. 素數判斷 bool isPrime(int n) {if (n < 2) retu…