溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux中進(jìn)程與線程的概念以及區(qū)別是什么

發(fā)布時(shí)間:2021-11-04 17:20:44 來(lái)源:億速云 閱讀:135 作者:柒染 欄目:建站服務(wù)器

本篇文章為大家展示了Linux中進(jìn)程與線程的概念以及區(qū)別是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

linux進(jìn)程與線程的區(qū)別,早已成為IT界經(jīng)常討論但熱度不減的話題。無(wú)論你是初級(jí)程序員,還是資深專家,都應(yīng)該考慮過(guò)這個(gè)問(wèn)題,只是層次角度不同罷了。對(duì)于一般的程序員,搞清楚二者的概念并在工作中學(xué)會(huì)運(yùn)用是其思考的主要問(wèn)題;對(duì)于資深工程師,如何在系統(tǒng)層面實(shí)現(xiàn)兩種技術(shù)及其各自的性能和實(shí)現(xiàn)代價(jià)是其思考的主要問(wèn)題。由此可見(jiàn)進(jìn)程和線程在IT界的重要地位。

進(jìn)程和線程是操作系統(tǒng)的基本概念,它們之間既有區(qū)別又有聯(lián)系。從定義來(lái)看,它們比較抽象,很難理解。今天給大家打個(gè)比方,教大家用類比的方法去理解它,掌握它。其實(shí),進(jìn)程和線程的關(guān)系就好比是工廠車間和車間工人的關(guān)系,進(jìn)程就像是一個(gè)工廠車間,線程就像是車間里的工人,每個(gè)工廠車間有一個(gè)入口和出口,這就好比執(zhí)行進(jìn)程程序的主函數(shù);每個(gè)工廠車間都有自己的地址空間,這個(gè)空間里邊可以包含不同工種的工人,這就好比一個(gè)進(jìn)程的地址空間,包含文本區(qū)域,數(shù)字區(qū)域,堆棧;一個(gè)工廠車間可以容納1個(gè)或n車間工人,進(jìn)程和線程是一對(duì)一或一對(duì)多的關(guān)系,一個(gè)進(jìn)程至少包含一個(gè)線程;車間里的工人共享車間里的空間,這象征著一個(gè)進(jìn)程的內(nèi)存空間是共享的,每個(gè)線程都可以使用共享內(nèi)存;每個(gè)車間可以供不同的工人使用,但每個(gè)車間的大小不一,容納人數(shù)都有上限,比如說(shuō)每個(gè)廁所可以容納1人,每個(gè)廚房可以容納n人,但車間里的每個(gè)工人都有上廁所和吃飯的需求,那怎么解決這個(gè)問(wèn)題呢?分批次進(jìn)行!這就好比線程里的鎖機(jī)制,當(dāng)n個(gè)線程爭(zhēng)奪同一資源時(shí),就在這個(gè)資源上加把鎖,當(dāng)線程使用完畢,資源釋放后才會(huì)供給后邊的資源使用。有人可能會(huì)問(wèn),怎么確定使用該資源的先后順序呢?按照優(yōu)先級(jí)的高低來(lái)確定,優(yōu)先級(jí)高的先使用,優(yōu)先級(jí)低的后使用,同一級(jí)別按照先來(lái)后到的順序使用。

通過(guò)這個(gè)故事我么可以看出,操作系統(tǒng)的設(shè)計(jì)可以歸納為3點(diǎn):

(1)  以多進(jìn)程形式,允許多個(gè)任務(wù)同時(shí)運(yùn)行,也就是允許工廠里的多個(gè)車間同時(shí)工作;

(2)  以多線程形式,允許單個(gè)任務(wù)分成不同的部分運(yùn)行,也就是允許同一車間可以有不同的工種完成不同的任務(wù);

(3)  提供協(xié)調(diào)機(jī)制,一方面防止進(jìn)程和線程之間產(chǎn)生沖突,另一方面進(jìn)程和線程之間共享資源。

我們大致對(duì)進(jìn)程和線程有一個(gè)基本的概念之后,接下來(lái)再來(lái)看下進(jìn)程和線程之間的區(qū)別:

(1)  進(jìn)程的執(zhí)行過(guò)程是順序執(zhí)行的,雖然在執(zhí)行過(guò)程中可能發(fā)生中斷或暫停,但該進(jìn)程所擁有的資源只為該線狀執(zhí)行過(guò)程服務(wù)。就好比一次只能給一個(gè)車間供電的工廠,當(dāng)一個(gè)車間A正在工作時(shí),另外一個(gè)更高級(jí)的車間B也要開(kāi)啟工作時(shí),那么此時(shí)車間A就要斷電,但車間A的一切設(shè)施和位置都不會(huì)發(fā)生變化,等車間B斷電后,車間A繼續(xù)工作。這是進(jìn)程宏觀上的線性執(zhí)行過(guò)程。而線程的改變只是改變了CPU執(zhí)行過(guò)程,而沒(méi)有發(fā)生進(jìn)程所擁有資源的變化。除了CPU之外,計(jì)算機(jī)內(nèi)的軟硬件資源的分配與線程無(wú)關(guān),線程只能共享它所屬進(jìn)程的資源。這就好比一個(gè)車間里的工人,他們可以互換位置,但他們還是在同一車間。

(2)  進(jìn)程在執(zhí)行過(guò)程中與線程還是有區(qū)別的。進(jìn)程是執(zhí)行中的程序,每個(gè)獨(dú)立的進(jìn)程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口,這就是程序中的主函數(shù)。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。就好比每個(gè)車間都有一個(gè)進(jìn)口和出口,可以單獨(dú)生產(chǎn)一件產(chǎn)品,但這依賴于車間里的工人協(xié)同工作才能完成。 

(3)  通過(guò)進(jìn)程和線程的執(zhí)行過(guò)程我們可以看出,進(jìn)程和線程是一對(duì)一或一對(duì)多的關(guān)系,一個(gè)進(jìn)程至少包含一個(gè)線程,進(jìn)程擁有一個(gè)完整的虛擬地址空間,它的空間大小是在設(shè)計(jì)它事就已經(jīng)確定的,不隨工人的多少,體積大小而改變,也就是說(shuō),不依賴于線程而獨(dú)立存在;反之,線程是進(jìn)程的一部分,沒(méi)有自己的地址空間,與進(jìn)程內(nèi)的其他線程一起共享分配給該進(jìn)程的所有資源。

(4)  線程在很少做進(jìn)程調(diào)度和切換的實(shí)時(shí)系統(tǒng)中可以有效地提高系統(tǒng)的執(zhí)行效率,但并不是在所有計(jì)算機(jī)系統(tǒng)中都是適用的。這就好比同一車間工人總是做同一種產(chǎn)品的產(chǎn)能要比經(jīng)常切換車間,切換工種,做不同產(chǎn)品的產(chǎn)能要高,因?yàn)樗麄兏鼡Q車間,熟悉環(huán)境,熟悉生產(chǎn)流程都需要花時(shí)間。這也就是說(shuō)線程的創(chuàng)建要比進(jìn)程的創(chuàng)建開(kāi)銷要小的多。

(5)  從邏輯角度來(lái)看,多線程的意義在于一個(gè)應(yīng)用程序中,他們可以實(shí)現(xiàn)應(yīng)用程序的多個(gè)功能,但并不能實(shí)現(xiàn)一個(gè)完整的應(yīng)用程序。就好比生產(chǎn)一個(gè)復(fù)雜的產(chǎn)品,每個(gè)車間只是生產(chǎn)該產(chǎn)品一個(gè)或多個(gè)零部件,一個(gè)完成的產(chǎn)品還是要靠整個(gè)工廠來(lái)完成。換言之,進(jìn)程的調(diào)度和管理以及資源分配還是要靠操作系統(tǒng)來(lái)完成,這就是進(jìn)程和線程的重要區(qū)別。

上述內(nèi)容就是Linux中進(jìn)程與線程的概念以及區(qū)別是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI