什么是分布式系統(tǒng)?Redis分布式鎖是什么?

java2019518.png

當您第一次進入工作場所時,無論您是在使用C+、Java,還是僅僅在申請操作和維護職位,我相信您都會遇到這個問題。
這是一個非?;镜膯栴},也是對人們水平的很大考驗。
這是因為每個學習計算機的人都應該明白,進程線程是計算機的基本概念,是每個程序員一直在接觸的東西。
但這是另一個充滿陷阱的問題,可以無限擴大和加深。例如,它可以從操作系統(tǒng)知識擴展到計算機組成原理,從單線程擴展到并發(fā)編程,從并發(fā)編程擴展到線程同步、線程安全、進程間通信等。
那么我們該如何回答這個問題呢?
因為您想要討論不同之處,所以首先需要了解什么是進程和線程。
以前,我讀了一篇材料,發(fā)現(xiàn)有一個很好的類比,可以很清楚地解釋它們。
1.計算機的核心是CPU,它承擔了所有的計算任務。就像個工廠,一直在運轉(zhuǎn)。
2。假設工廠的電力有限,一次只能供應給一個車間。也就是說,一個車間開工的時候,其他車間都必須停工。這意味著單個CPU一次只能運行一個任務。
3。這個過程就像一個工廠車間,它表示CPU可以處理的單個任務。在任何給定的時間,CPU總是運行一個進程,而其他進程沒有運行。
4。一個車間里可以有許多工人。他們共同努力完成一項任務。
5。線程就像車間里的工人。一個進程可以包含多個線程。
6。車間的空間由工人們共享,例如,每個工人都可以進入許多房間。這表示進程的內(nèi)存空間是共享的,可以由每個線程使用。
7。但是,每個房間的大小是不同的,有些房間只能容納一個人,如廁所。當有人在里面的時候,沒有其他人可以進去。這意味著當一個線程使用一些共享內(nèi)存時,其他線程必須等待它結(jié)束,才能使用這段內(nèi)存。
8。防止別人進來的一個簡單方法就是在門上一把鎖。先到的人鎖門,到的人看到鎖。他們在門口排隊,等鎖打開后再進入。這被稱為“互斥”(互斥,縮寫互斥),以防止多個線程同時讀取和寫入內(nèi)存區(qū)域。
9。也有可以同時容納n個人的房間,比如廚房。換句話說,如果數(shù)字大于n,那么只能在外面等待的人就越多。這類似于某些只能由固定數(shù)量的線程使用的內(nèi)存區(qū)域。
10。在這一點上的解決辦法是在門口掛一把鑰匙。進去的人拿著鑰匙,出來的時候把鑰匙掛回去。后到的人發(fā)現(xiàn)鑰匙架空了,就知道必須在門口排隊等著了。這種方法被稱為“信號量”(Semaphore),以確保多個線程之間不會發(fā)生沖突。
不難看出互斥是信號量的特例。也就是說,后者完全可以取代前者。但是,因為互斥是簡單和有效的,所以在有必要確保資源是排他的時候,仍然使用這種設計。
11。操作系統(tǒng)的設計,所以可以歸結(jié)為為三點:
(1)多進程形式,允許多個任務同時運行;
(2)以多線程的形式,將單個任務劃分為不同的部分;
(3)提供協(xié)調(diào)機制,一方面防止進程和線程之間的沖突,另一方面允許進程和線程之間共享資源。
這個類比可以生動地說明進程和線程之間的區(qū)別。
當然,你不能在采訪中這么說。面試官預計會和你在一起很匆忙。一刻千金。我們需要用最簡潔的語言來說明兩者之間的概念和區(qū)別。
你可以這樣回答(面試需要有邏輯的、簡潔的、切中要害的):
(1)進程
過程是程序的執(zhí)行過程,是一個動態(tài)的概念,是在程序執(zhí)行過程中分配和管理資源的基本單元。每個進程都有自己的地址空間,并且至少有五種基本狀態(tài)。它們是:初始狀態(tài)、執(zhí)行狀態(tài)、等待狀態(tài)、就緒狀態(tài)、終止狀態(tài)。
(2)線程
線程是CPU調(diào)度和分派的基本單位,它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。
(3)聯(lián)系
線程是進程的一部分。線程只能屬于一個進程,進程可以有多個線程,但至少有一個線程。
(4)區(qū)別:理解它們的差別,我從資源使用的角度出發(fā)。(所謂的資源就是計算機里的中央處理器,內(nèi)存,文件,網(wǎng)絡等等)
根本區(qū)別:進程是操作系統(tǒng)資源分配的基本單位,而線程是任務調(diào)度和執(zhí)行的基本單位
在開銷方面:每個進程都有獨立的代碼和數(shù)據(jù)空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享代碼和數(shù)據(jù)空間,每個線程都有自己獨立的運行棧和程序計數(shù)器(PC),線程之間切換的開銷小。
環(huán)境:您可以在操作系統(tǒng)中同時運行多個進程(程序);多個線程在同一進程中同時執(zhí)行(使用cpu調(diào)度,每個時間片只有一個線程)。
內(nèi)存分配:系統(tǒng)在運行時為每個進程分配不同的內(nèi)存空間;對于線程(CPU除外),系統(tǒng)不將內(nèi)存分配給線程(線程使用的資源來自它們所屬進程的資源),并且只能在線程組之間共享資源。
包含關系:沒有線程的進程可以看做是單線程的,如果一個進程內(nèi)有多個線程,則執(zhí)行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,所以線程也被稱為輕權(quán)進程或者輕量級進程。
1。為什么我需要設計線程?
在傳統(tǒng)的過程模型中,流程的內(nèi)涵可以分為以下兩個方面:
調(diào)度和執(zhí)行的基本單元:每個進程都有自己的運行狀態(tài)、優(yōu)先級、寄存器等。它是操作系統(tǒng)調(diào)度的基本單元。
資源所有權(quán):包括程序、數(shù)據(jù)、文件和其他資源。進程擁有這些資源的所有權(quán),而OS則提供保護,防止不同進程之間的資源沖突。
因為它們是兩個分開的函數(shù),它們可以分開嗎?這就產(chǎn)生了線程(線程)的概念:
執(zhí)行與調(diào)度的基本單位:thread
資源所有權(quán):process
所以執(zhí)行和調(diào)度的基本單元是線程,這種設置有什么好處?
在計算機操作系統(tǒng)中有兩個重要的概念:并發(fā)和隔離。
并發(fā)是為了盡量讓硬件利用率高,線程是為了在系統(tǒng)層面做到并發(fā)。線程上下文切換效率遠高于進程上下文切換,從而提高了并發(fā)效率。
隔離也是并發(fā)之后要解決的重要問題,計算機的資源一般是共享的,隔離要能保障崩潰了這些資源能夠被回收,不影響其他代碼的使用。因此,可以說操作系統(tǒng)只有線程而沒有進程,但是這樣的系統(tǒng)經(jīng)常會崩潰,而且最初開發(fā)時的操作系統(tǒng)與之非常相似。
因此:線程與并發(fā)性相關,進程與隔離相關。線程基本上是為了并發(fā)執(zhí)行代碼而引入的,因為要分配CPU時間片,暫停和恢復應該能夠繼續(xù)執(zhí)行,就像它們沒有暫停一樣。一個進程相當于一堆線程加上在線程執(zhí)行過程中請求的資源,這些資源一旦掛起,就應該是可回收的,而不會影響其他程序。
歡迎進群547474567學習交流,群里提供全套的編程教程哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容