在上學的時候,老師講到進程與線程的時候多是這樣講的:vue
那個時候爲了考試我都背下來了,可是內心想說:what?這都是些什麼東西? 下面讓我來試着用更通俗的語言來給你說說進程、線程、互斥鎖、信號量的那些事。算法
咱們能夠將本身平時住的房子類比爲一個進程,每個房間及其佔用者比喻爲一個線程。房子自己並不會作任何的事情,可是線程是房子裏面每個活躍的人,他們平時洗衣、作飯、看電視……,就像線程執行本身的代碼同樣在運行着。spring
單線程
單線程就是一個叫作「進程」的房子裏面,只住了你一我的,你能夠在這個房子裏面任什麼時候間去作任何的事情。你是看電視、仍是玩電腦,全都有你本身說的算。想幹什麼幹什麼,想什麼時間作什麼就什麼時間作什麼。編程
多線程
可是若是你處在一個「多人」的房子裏面,每一個房子裏面都有叫作「線程」的住戶:線程一、線程二、線程三、線程4,狀況就不得不發生變化了。假如這些線程是你的老婆、孩子、父母。後端
多線程出現這些問題的根本緣由在於」共享資源「:時間、電視、廁所、廚房……等等。那咱們下面來看看,如何處理協調使用這些"共享資源"?springboot
在多線程編程中有」鎖」的概念,在你的房子裏面也有鎖。若是你的老婆在上廁所並鎖上門,她就是在獨享這個「房子(進程)」裏面的公共資源「衛生間」,若是你的家裏只有這一個衛生間,你做爲另一個線程就只能先等待。多線程
線程對鎖的佔用是有優先級的,就像在你的家裏也有優先級。當你家只有一個衛生間的時候,孩子、老婆、你同時要去上廁所,一般來講 你的優先級是1,你老婆的優先級是100,你孩子的優先級是255。須要說明的是:數值越小優先級越低。可是不一樣的狀況下會有不一樣的優先級調度算法,關鍵核心因子是優先級設置與等待時間,若是你確實等待了很長時間,老婆孩子可能看你快憋不住了,讓你先去使用洗手間也是能夠的。前後端分離
如今讓咱們從衛生間走入廚房,首先咱們要明確的一點是:廚房裏面能夠有一我的,也能夠有多我的。
那咱們怎麼控制使用「廚房」這個公共資源的人數(線程數)?一個比較好的方法就是使用信號量。微服務
「信號量」在編程術語中使用單詞semaphore,那什麼是「信號量」?信號量就比如你家廚房入口架子上擺了三把鍋:spa
因此說:當信號量總數爲1的時候,也就是你家只有一把鍋,此時信號量做用就等同於互斥鎖。
來一張專業點的圖,別讓您誤會我是講故事的。講技術,我但是認真的!
以爲對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創做動力! 。另外,筆者最近一段時間輸出了以下的精品內容,期待您的關注。