自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

教科書不會告訴你:進(jìn)程和線程的本質(zhì)區(qū)別是資源博弈

開發(fā) 前端
進(jìn)程就像獨(dú)立店鋪——安全但成本高;線程就像店內(nèi)多窗口——高效但要小心管理。下次看到這兩個(gè)詞,記得想想早餐店的故事!

引言

今天就圍繞這個(gè)問題,來探討下,對于直接講解原理,有點(diǎn)晦澀難懂,所以就打個(gè)比喻來講解。

開始

用早餐店故事講懂進(jìn)程和線程

1. 基本定義:早餐店的兩種運(yùn)營模式

想象你要開一家早餐店,有兩種經(jīng)營方式:

進(jìn)程模式:開多家獨(dú)立分店,每家店有:
分店之間完全隔離,一家店著火不會影響其他店。

自己的廚房(內(nèi)存)

自己的收銀臺(文件資源)

自己的服務(wù)員(執(zhí)行流程)

線程模式:開一家大店多個(gè)窗口,共享:但一個(gè)窗口著火可能燒毀整個(gè)廚房。

      同一個(gè)廚房(內(nèi)存共享)

         同一個(gè)收銀臺(共享文件)

        每個(gè)窗口有獨(dú)立服務(wù)員(執(zhí)行流程)

2. 最核心區(qū)別:資源怎么分


進(jìn)程

線程

內(nèi)存

每家店獨(dú)立冰箱

共享中央廚房冰箱

文件

每家店獨(dú)立賬本

共用一本總賬本

崩潰影響

一家店倒閉其他店照常

整個(gè)店停業(yè)

開張成本

需要租新店面(開銷大)

加個(gè)窗口就行(開銷?。?/span>

3. 現(xiàn)實(shí)生活場景

用進(jìn)程的場景

瀏覽器(每個(gè)標(biāo)簽頁是獨(dú)立進(jìn)程,避免一個(gè)頁面崩潰導(dǎo)致整個(gè)瀏覽器掛掉)

銀行系統(tǒng)(每個(gè)ATM機(jī)是獨(dú)立進(jìn)程,保證交易隔離)

用線程的場景

          文檔編輯器(一個(gè)線程處理輸入,一個(gè)自動保存,共享同一份文檔)

          游戲服務(wù)器(多個(gè)玩家線程共享地圖數(shù)據(jù))

4. 計(jì)算機(jī)中的經(jīng)典問題

問題1:為什么多線程容易出BUG?就像多個(gè)服務(wù)員共用廚房:

? 服務(wù)員A正在往鍋里打雞蛋

? 服務(wù)員B突然把整鍋倒掉開始煮粥

? 結(jié)果:可能得到一碗雞蛋粥(數(shù)據(jù)混亂)

解決方法:給廚房門口加鎖(互斥鎖),一次只允許一個(gè)服務(wù)員操作鍋。

問題2:為什么創(chuàng)建進(jìn)程更耗資源?

? 開分店需要:租新店面(分配內(nèi)存)、買新廚具(初始化資源)、辦執(zhí)照(系統(tǒng)登記)

? 加窗口只需要:培訓(xùn)新服務(wù)員(新建線程控制塊)

5. 程序員怎么寫代碼

創(chuàng)建進(jìn)程的代碼(Python示例):

import os

# 開新分店
pid = os.fork()
if pid == 0:
    print("我是子進(jìn)程,做煎餅")  # 子進(jìn)程獨(dú)立運(yùn)行
else:
    print("我是父進(jìn)程,做豆?jié){")  # 父進(jìn)程繼續(xù)

創(chuàng)建線程的代碼

from threading import Thread

def 煮粥():
    print("線程A開始煮粥")

def 炸油條():
    print("線程B開始炸油條")

# 開兩個(gè)窗口
Thread(target=煮粥).start()
Thread(target=炸油條).start()

6. 怎么選擇用哪個(gè)?

選進(jìn)程:要做的事情需要絕對安全隔離(比如處理用戶支付)

選線程:要快速處理大量共享數(shù)據(jù)的任務(wù)(比如實(shí)時(shí)聊天室)

7. 現(xiàn)代云計(jì)算中的變化

在Kubernetes容器里:

每個(gè)容器就像一個(gè)獨(dú)立分店(進(jìn)程隔離)

? 但容器內(nèi)可以用多線程處理請求(類似大店多窗口)

? 特別提醒:如果容器里線程太多,可能突破容器的CPU限制!

8. 最后流程圖

圖片

總結(jié):進(jìn)程就像獨(dú)立店鋪——安全但成本高;線程就像店內(nèi)多窗口——高效但要小心管理。下次看到這兩個(gè)詞,記得想想早餐店的故事!

責(zé)任編輯:武曉燕 來源: 云原生運(yùn)維圈
相關(guān)推薦

2021-11-30 08:57:43

GETPOSTJava

2024-03-11 08:34:43

同步異步調(diào)用

2020-12-21 06:18:15

Android線程主線程

2011-05-25 13:10:40

SQL ServerOracle

2021-07-02 06:54:45

GoJavachannel

2017-05-27 09:58:42

BGP動態(tài)靜態(tài)

2023-01-03 18:32:32

2018-02-06 14:32:03

云服務(wù)器本質(zhì)區(qū)別

2021-04-11 09:59:44

大數(shù)據(jù)JAVA開發(fā)

2025-03-04 10:45:19

JVM內(nèi)存模型Java

2010-09-27 11:24:37

SQL聚簇索引

2017-09-25 16:21:30

Spark on yacluster模式

2009-07-12 13:55:29

2021-07-06 11:40:28

Android框架代碼

2012-10-17 10:09:14

大數(shù)據(jù)大數(shù)據(jù)管理數(shù)據(jù)挖掘

2024-09-23 22:48:46

數(shù)據(jù)中臺數(shù)據(jù)飛輪數(shù)據(jù)驅(qū)動

2014-10-31 10:10:49

2018-09-17 14:51:11

信息化數(shù)字化區(qū)別

2022-10-12 09:01:52

Linux內(nèi)核線程

2022-04-28 08:12:29

函數(shù)調(diào)用進(jìn)程切換代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號