
在上學的時候,老師講到行程與執行緒的時候可能是這樣講的:
- 行程是一個具有一定獨立功能的程式在一個資料集上的一次動態執行的程序,是作業系統進行資源分配和調度的一個獨立單元,是應用程式運行的載體,
- 執行緒是程式執行中一個單一的順序控制流程,是程式執行流的最小單元,是處理器調度和分派的基本單位,一個行程可以有一個或多個執行緒,各個執行緒之間共享程式的記憶體空間(也就是所在行程的記憶體空間),

那個時候為了考試我都背下來了,但是心里想說:what?這都是些什么東西? 下面讓我來試著用更通俗的語言來給你說說行程、執行緒、互斥鎖、信號量的那些事,
一、房子與居住者
我們可以將自己平時住的房子類比為一個行程,每一個房間及其占用者比喻為一個執行緒,房子本身并不會做任何的事情,但是執行緒是房子里面每一個活躍的人,他們平時洗衣、做飯、看電視……,就像執行緒執行自己的代碼一樣在運行著,

單執行緒
單執行緒就是一個叫做“行程”的房子里面,只住了你一個人,你可以在這個房子里面任何時間去做任何的事情,你是看電視、還是玩電腦,全都有你自己說的算,想干什么干什么,想什么時間做什么就什么時間做什么,
多執行緒
但是如果你處在一個“多人”的房子里面,每個房子里面都有叫做“執行緒”的住戶:執行緒1、執行緒2、執行緒3、執行緒4,情況就不得不發生變化了,假如這些執行緒是你的老婆、孩子、父母,
- 父母老人午睡的時候你不能開音響
- 老婆要看“甄嬛傳”,你就不能看球賽
- 孩子沒睡覺,你就別想看書
- ……
多執行緒出現這些問題的根本原因在于”共享資源“:時間、電視、廁所、廚房……等等,那我們下面來看看,如何處理協調使用這些"共享資源"?
二、鎖(互斥鎖)
在多執行緒編程中有”鎖”的概念,在你的房子里面也有鎖,如果你的老婆在上廁所并鎖上門,她就是在獨享這個“房子(行程)”里面的公共資源“衛生間”,如果你的家里只有這一個衛生間,你作為另外一個執行緒就只能先等待,

執行緒對鎖的占用是有優先級的,就像在你的家里也有優先級,當你家只有一個衛生間的時候,孩子、老婆、你同時要去上廁所,通常來說 你的優先級是1,你老婆的優先級是100,你孩子的優先級是255,需要說明的是:數值越小優先級越低,但是不同的情況下會有不同的優先級調度演算法,關鍵核心因子是優先級設定與等待時間,如果你確實等待了很長時間,老婆孩子可能看你快憋不住了,讓你先去使用洗手間也是可以的,
三、信號量
現在讓我們從衛生間走入廚房,首先我們要明確的一點是:廚房里面可以有一個人,也可以有多個人,
那我們怎么控制使用“廚房”這個公共資源的人數(執行緒數)?一個比較好的方法就是使用信號量,

“信號量”在編程術語中使用單詞semaphore,那什么是“信號量”?信號量就好比你家廚房入口架子上擺了三把鍋:
- 如果你的孩子熱奶拿走一把,你的老婆熱湯拿走一把,你的媽媽做菜拿走一把,你想煮面條就沒有鍋了,當你看到這種情況,你就不會進入廚房了,也就說廚房按照“鍋的數量”作為信號量,只能容納三個人(執行緒),
- 當你的老婆熱完湯之后,把鍋重新放回架子上,你就可以去獲得一個鍋,你就可以進入廚房了,
所以說:當信號量總數為1的時候,也就是你家只有一把鍋,此時信號量作用就等同于互斥鎖,
四、專業點好么
來一張專業點的圖,別讓您誤會我是講故事的,講技術,我可是認真的!

歡迎關注我的博客,里面有很多精品合集
- 本文轉載注明出處(必須帶連接,不能只轉文字):字母哥博客,
覺得對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創作動力! ,另外,筆者最近一段時間輸出了如下的精品內容,期待您的關注,
- 《手摸手教你學Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《實戰前后端分離RBAC權限管理系統》
- 《實戰SpringCloud微服務從青銅到王者》
- 《VUE深入淺出系列》
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/1916.html
標籤:Java
上一篇:字串分隔
