進(jìn)程和線(xiàn)程的深入理解

下面是抽象類(lèi)比:
1、單CPU:一臺(tái)單核處理器計(jì)算機(jī) = 一個(gè)車(chē)間;
2、多CPU:一臺(tái)多核處理器計(jì)算機(jī) = 一座工廠(chǎng);
1、進(jìn)程:一個(gè)車(chē)間 = 一個(gè)進(jìn)程;(即一個(gè)運(yùn)行的程序)
2、多進(jìn)程:一座工廠(chǎng)可以同時(shí)運(yùn)行多個(gè)車(chē)間;
CPU和進(jìn)程:?jiǎn)蜟PU只能同時(shí)運(yùn)行單個(gè)進(jìn)程,多CPU可以同時(shí)運(yùn)行多個(gè)進(jìn)程。
1、線(xiàn)程:車(chē)間內(nèi)一個(gè)工人 = 一個(gè)線(xiàn)程;
2、進(jìn)程與線(xiàn)程:一個(gè)進(jìn)程可以包括多個(gè)線(xiàn)程。
線(xiàn)程間內(nèi)存共享:車(chē)間的空間是工人們共享的,比如許多房間是每個(gè)工人都可以進(jìn)出的。一個(gè)進(jìn)程的內(nèi)存空間是共享的,每個(gè)線(xiàn)程都可以使用這些共享內(nèi)存。
內(nèi)存安全:可是,每個(gè)車(chē)間容納大小不同,有的最多只能容納一個(gè)人。車(chē)間人滿(mǎn)的時(shí)候,其他人就進(jìn)不去了。
一個(gè)線(xiàn)程使用某些共享內(nèi)存時(shí),其他線(xiàn)程必須等它結(jié)束,才能使用這一塊內(nèi)存。
互斥鎖:一個(gè)防止他人進(jìn)入的簡(jiǎn)單方法,就是門(mén)口加一把鎖。先到的人鎖上門(mén),后到的人看到上鎖,就在門(mén)口排隊(duì),等鎖打開(kāi)再進(jìn)去。
這就叫"互斥鎖"–Mutex,防止兩個(gè)線(xiàn)程同時(shí)讀寫(xiě)某一塊內(nèi)存區(qū)域。
信號(hào)量:這時(shí)的解決方法,就是在門(mén)口掛n把鑰匙。進(jìn)去的人就取一把鑰匙,出來(lái)時(shí)再把鑰匙掛回原處。后到的人發(fā)現(xiàn)鑰匙架空了,就知道必須在門(mén)口排隊(duì)等著了。
這種做法叫做"信號(hào)量"(Semaphore),用來(lái)保證多個(gè)線(xiàn)程不會(huì)互相沖突。
鎖和信號(hào)量:不難看出,互斥鎖是信號(hào)量的一種特殊情況(n=1時(shí))。也就是說(shuō),完全可以用后者替代前者。但是,因?yàn)閙utex較為簡(jiǎn)單,且效率高,所以在必須保證資源獨(dú)占的情況下,還是采用這種設(shè)計(jì)。
操作系統(tǒng)的資源分配與調(diào)度邏輯
1、以多進(jìn)程形式,允許多個(gè)任務(wù)同時(shí)運(yùn)行;
2、以多線(xiàn)程形式,允許單個(gè)任務(wù)分成不同的部分運(yùn)行;
3、提供協(xié)調(diào)機(jī)制,一方面防止進(jìn)程之間和線(xiàn)程之間產(chǎn)生沖突,另一方面允許進(jìn)程之間和線(xiàn)程之間共享資源。
下面是嚴(yán)謹(jǐn)?shù)慕忉專(zhuān)?/p>
進(jìn)程
進(jìn)程是程序的一次執(zhí)行過(guò)程,是一個(gè)動(dòng)態(tài)概念,是程序在執(zhí)行過(guò)程中分配和管理資源的基本單位,每一個(gè)進(jìn)程都有一個(gè)自己的地址空間,至少有 5 種基本狀態(tài),它們是:初始態(tài),執(zhí)行態(tài),等待狀態(tài),就緒狀態(tài),終止?fàn)顟B(tài)。
線(xiàn)程
線(xiàn)程是CPU調(diào)度和分派的基本單位,它可與同屬一個(gè)進(jìn)程的其他的線(xiàn)程共享進(jìn)程所擁有的全部資源。
進(jìn)程和線(xiàn)程的關(guān)系
1、線(xiàn)程是進(jìn)程的一部分
2、一個(gè)線(xiàn)程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線(xiàn)程,但至少有一個(gè)線(xiàn)程
進(jìn)程和線(xiàn)程的區(qū)別
理解它們的差別,我從資源使用的角度出發(fā)。(所謂的資源就是計(jì)算機(jī)里的中央處理器,內(nèi)存,文件,網(wǎng)絡(luò)等等)
1、根本區(qū)別:進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線(xiàn)程是任務(wù)調(diào)度和執(zhí)行的基本單位
2、開(kāi)銷(xiāo)方面:每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(程序上下文),進(jìn)程之間切換開(kāi)銷(xiāo)大;線(xiàn)程可以看做輕量級(jí)的進(jìn)程,同一類(lèi)線(xiàn)程共享代碼和數(shù)據(jù)空間,每個(gè)線(xiàn)程都有自己獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線(xiàn)程之間切換的開(kāi)銷(xiāo)小
3、所處環(huán)境:在操作系統(tǒng)中能同時(shí)運(yùn)行多個(gè)進(jìn)程(程序);而在同一個(gè)進(jìn)程(程序)中有多個(gè)線(xiàn)程同時(shí)執(zhí)行(通過(guò)CPU調(diào)度,在每個(gè)時(shí)間片中只有一個(gè)線(xiàn)程執(zhí)行)
4、內(nèi)存分配:系統(tǒng)為每個(gè)進(jìn)程分配不同的內(nèi)存空間;而對(duì)線(xiàn)程而言,除了CPU外,系統(tǒng)不會(huì)為線(xiàn)程分配內(nèi)存(線(xiàn)程所使用的資源來(lái)自其所屬進(jìn)程的資源),線(xiàn)程組之間只能共享資源
5、包含關(guān)系:線(xiàn)程是進(jìn)程的一部分,所以線(xiàn)程也被稱(chēng)為輕權(quán)進(jìn)程或者輕量級(jí)進(jìn)程
