併發技術1:CSP併發理論
非同步async
並行:多個任務併發執行
同步sync
序列:多個任務依次執行
阻塞block
某個併發任務由於拿不到資源沒法幹活,從而無所事事地乾等
程式併發-執行緒併發-協程併發
非同步回撥async callback
A執行緒喚起B執行緒,令其幹活
同時給B一個回撥函式
命令B在幹完活以後,執行這個回撥函式
這個回撥函式會與A執行緒發生互動
A不必阻塞等待B執行的結果,AB兩個執行緒可以併發執行
利弊
- 效率高
- 回撥地獄CallbackHell,邏輯線不清晰
共享記憶體
- 多個併發執行緒通過共享記憶體的方式互動資料
- 執行緒安全問題:AB間共享的資料地址可能被C併發修改
同步鎖/資源鎖
為了解決共享記憶體所導致的執行緒安全問題,共享的記憶體地址在特定時間段被特定執行緒鎖定
加鎖期間,其它執行緒無法訪問,帶來低效率問題
死鎖
A鎖住B的資源
B鎖住A要的資源
AB同時阻塞
案例:小兩口的冷戰
- 女:鎖住女人的尊嚴,得到男人的尊嚴後才釋放
- 男:鎖住男人的尊嚴,得到女人的尊嚴後才釋放
執行緒池
-
背景:執行緒的開銷大
-
記憶體:儲存上下文資料
-
CPU:執行緒排程
為了避免無度建立執行緒(記憶體溢位OutOfMemory),在一個池中建立一堆執行緒,迴圈利用這些執行緒,用完了以後重置並丟回池中.
-
利弊
利:避免了無度建立執行緒,降低了OOM的風險 弊:用不用都佔去了一大塊記憶體開銷
執行緒併發的弊端
開執行緒佔記憶體
啥也不幹就拿走1M棧空間
1024條執行緒就佔用1G記憶體
執行緒切換佔CPU
記憶體共享不安全
加了鎖效率又低下
回撥地獄導致開發難度高
堆疊
棧
- 變數和物件的名稱
- 引用堆地址
堆
- 雜亂無章地堆放各種資料
- 沒有棧對其進行引用時,就由nil進行引用
- 被nil引用的堆地中的內容隨時可能被垃圾回收器回收
垃圾回收
- 一塊堆記憶體如果沒有被棧引用,就會被0號棧(空nil)所引用
- 一切被nil引用的對記憶體,會隨時被垃圾回收器(GarbageCollector=GC)回收
CSP模型
- CommunicatingSequentialProcess
- 可通訊的序列化程式
- 併發的程式間通過管道進行通訊
共享記憶體 VS 管道
- 記憶體共享:通過記憶體共享通訊
- 管道:通過通訊共享記憶體
管道
- 最早由CSP模型提出
- 以點對點管道代替記憶體共享實現併發程式間的資料互動
- 相比記憶體共享資料互動的相率要高很多
協程
- coroutine
- coorperte
- 協作
- IO時讓出CPU
- routine
- 事務
- 微執行緒/纖程
學院Go語言視訊主頁
https://edu.csdn.net/lecturer/1928
[清華團隊帶你實戰區塊鏈開發]
(https://ke.qq.com/course/344443?tuin=3d17195d)
掃碼獲取海量視訊及原始碼 QQ群:721929980
相關文章
- Java併發---併發理論Java
- 高併發技術
- 15-併發控制理論
- 「分散式技術專題」併發系列三:樂觀併發控制之理論研究分散式
- GO-併發技術Go
- 併發技術中同步
- 併發-1-併發模型模型
- 併發技術4:讀寫鎖
- 併發技術3:定時器定時器
- 併發技術4:同步排程
- 併發技術3:管道通訊
- 併發技術2:多協程
- 高併發設計技術方案
- 併發技術5:死鎖問題
- Postgres併發處理
- MySQL 併發處理MySql
- React的併發悖論React
- 「分散式技術專題」併發系列一:基於加鎖的併發控制分散式
- 「分散式技術專題」併發系列二:基於時間的併發控制分散式
- 「分散式技術專題」併發系列三:樂觀併發控制之原型系統分散式原型
- 處理併發衝突
- 【併發技術04】執行緒技術之死鎖問題執行緒
- 【併發技術03】傳統執行緒互斥技術—synchronized執行緒synchronized
- 《java併發程式設計的藝術》併發工具類Java程式設計
- 併發程式設計導論程式設計
- 「分散式技術專題」併發系列三:樂觀併發控制之生產系統分散式
- 多執行緒與併發-----Lock鎖技術執行緒
- Elasticsearch技術解析與實戰(六)Elasticsearch併發Elasticsearch
- python併發程式設計之多執行緒理論部分Python程式設計執行緒
- 42、併發程式設計之多執行緒理論篇程式設計執行緒
- [仁潤雲技術團隊]併發程式設計-(1)基本概念程式設計
- 《java併發程式設計的藝術》併發容器和框架Java程式設計框架
- [仁潤雲技術團隊]併發程式設計-(2)併發程式設計的目標程式設計
- 併發問題處理方式
- Java併發指南1:併發基礎與Java多執行緒Java執行緒
- Java併發技術05:傳統執行緒同步通訊技術Java執行緒
- Go語言 | CSP併發模型與Goroutine的基本使用Go模型
- 【併發技術02】傳統執行緒技術中的定時器技術執行緒定時器