時間: 2月26日22點markdown
地點: 永旺商場多線程
背景: 隔壁空地上的商場終於建成了,大大小小的商店紛紛入駐,大A發現了商機,想開一家奶茶店,話很少說,交錢幹。ide
大A是個踏實肯幹的人,開店之初啊,也沒想那麼多,就想踏踏實實掙點小錢,因而乎把本身的這些想法告訴了設計師,設計師一想,好辦:oop
齊活,說幹就幹,不到一個月店面就裝修好了,因而乎按照設計師的規劃招了4個小姐姐。性能
2020年2月26日,隨着一頓鞭炮聲大A的奶茶店終於開張了,陸陸續續來了不少顧客...idea
咱們把商場當作一個系統,那麼咱們的奶茶店就是一個進程,固然咱們的商場還有 H&M啊、
優衣庫啊,你懂的!這些店之間互不干擾,各自開門各自作生意,互不影響...
複製代碼
開業之初效果:spa
這個店(進程)就這樣紅紅火火開起來了...線程
系統(System):商場
進程(Process):奶茶店
線程(Thread):員工的平常工做
進程是系統中正在運行的一個應用程序,每一個進程之間是獨立的
(你賣你的奶茶,我賣個人衣服,YES!)
複製代碼
奶茶店天天都有不少活:設計
天天咱們奶茶店都要開門,只有開門了員工才能進來,才能幹活,這是核心門檻(主線程)
,全部員工幹活才讓奶茶店運營起來(線程是進程的基本執行單元)
。code
線程(thread):進程的基本執行單元,一個進程的全部任務都在線程中執行,
進程要想執行任務必需要有線程,程序會默認開啓一條線程,這條線程叫‘主線程’
複製代碼
大A仍是很踏實肯幹的,天天賣命的吆喝,生意也是愈來愈好,這一每天的,人都排到馬路對面了...
期間不斷的有人跟大A說:老闆啊,多招點人撒,搞兩個收銀的,排兩個隊,這大熱天的咱們等的也是很難受啊,有的人等不了就去別家買了,你也損失不是...
大A一想,也是啊,那麼就試試,又找了設計師,此次相對比較簡單,就是加臺收銀機嘛,你再額外招個小姐姐就行了,因而乎店門關了兩週,終於算是裝修好了: 艾瑪果真好多了,至少如今顧客都能進屋吹空調了,哈哈,惟獨就多招了一個收銀小姐姐而已,這買賣划算啊...
因爲天天的原料有限,並且不一樣的品種的奶茶數量也是有限的,常常小B剛派了一杯🍑🍑🍑口味的,小C也派了一杯🍑🍑🍑口味的,後臺一看,MMP
因而乎,後臺就給兩位小姐姐提了個idea,大家賣奶茶的時候提早問一下(加鎖)
我這邊還能作幾杯,能作就走單,不能就告知客戶,哦了,屌屌的。
可是有的顧客又提問題了,如今卻是好排隊了,可是買了也沒地方坐了,原來新的隊列佔了原來圓桌的區域,致使圓桌變少了,沒辦法嘛,商場就給我分配這麼大的空間,空間有限呀,只能少兩張桌子了,也是爲了你們更快的喝上奶茶嘛,坐哪重要嗎?哈哈!
開始幾天搞促銷,大夥熱熱烈烈的,幾天以後小姐姐B就開始抱怨了,如今兩個收銀員一塊兒派單,仍是咱們三我的來配料。真的是...
有一天後臺調配師小C和收銀小B鬧矛盾了,講道理是不可能講道理了:
老闆一聽,你倆玩起
死鎖
來了,我這店還開個錘子哦~
經過上面種種,咱們分析多線程的優缺點得出:
多線程優勢
- 開闢線程能提升程序執行效率(派單更快了)
- 能適當提升資源利用率CPU,內存(後臺均可以忙活起來)
- 線程上的任務執行完後,線程會自動銷燬(某一隊沒人了,收銀員小姐姐就開始刷抖音了)
多線程缺點
- 開闢線程須要佔用必定的內存空間(圓桌區域變小了)
- 程序更加複雜,線程間通信,多線程數據共享(同時派單問題,加鎖問題)
- 開啓大量線程,會佔用大量內存空間,下降程序性能(小姐姐表示好累)
- 線程越多CPU在線程上的開銷越大(小姐姐不夠用了,須要更多的小姐姐來配合)
複製代碼
至此咱們關於進程和線程的故事講的差很少了,你弄明白了嗎,下面咱們補充一些其餘的知識點。
話很少說,圖示很詳細:
後面我會針對GCD以及各類鎖來詳述多線程的原理和實線,敬請期待,寫的很差,但願多多賜教和點評,謝謝。