問題
一 進(jìn)程和線程的對比
二 為什么進(jìn)程切換開銷大,線程切換開銷低呢?
......................................................................................................................................................
一 進(jìn)程和線程的對比
幾個(gè)方面對比:
-
根本區(qū)別:進(jìn)程是操作系統(tǒng)資源分配的基本單位节榜,而線程是任務(wù)調(diào)度和執(zhí)行的基本單位
開銷方面:每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(程序上下文),程序之間的切換會(huì)有較大的開銷别智;線程可以看做輕量級的進(jìn)程宗苍,同一類線程共享代碼和數(shù)據(jù)空間,每個(gè)線程都有自己獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC)薄榛,線程之間切換的開銷小讳窟。
所處環(huán)境:在操作系統(tǒng)中能同時(shí)運(yùn)行多個(gè)進(jìn)程(程序);而在同一個(gè)進(jìn)程中有多個(gè)線程同時(shí)執(zhí)行(通過CPU調(diào)度敞恋,在每個(gè)時(shí)間片中只有一個(gè)線程執(zhí)行)
內(nèi)存分配:系統(tǒng)在運(yùn)行的時(shí)候會(huì)為每個(gè)進(jìn)程分配不同的內(nèi)存空間丽啡;而對線程而言,除了CPU外硬猫,系統(tǒng)不會(huì)為線程分配內(nèi)存(線程所使用的資源來自其所屬進(jìn)程的資源)补箍,線程組之間只能共享資源。
包含關(guān)系: 操作系統(tǒng)中的每一個(gè)進(jìn)程中都至少存在一個(gè)線程,一個(gè)進(jìn)程可擁有多個(gè)線程,一個(gè)線程只屬于一個(gè)進(jìn)程,線程也被稱為輕權(quán)進(jìn)程或者輕量級進(jìn)程.
二 為什么進(jìn)程切換開銷大,線程切換開銷低呢?
關(guān)鍵點(diǎn):
什么是虛擬內(nèi)存?
虛擬內(nèi)存是操作系統(tǒng)為每個(gè)進(jìn)程提供的一種抽象啸蜜,每個(gè)進(jìn)程都有屬于自己的馏予、私有的、地址連續(xù)的虛擬內(nèi)存盔性,當(dāng)然我們知道最終進(jìn)程的數(shù)據(jù)及代碼必然要放到物理內(nèi)存上霞丧,那么必須有某種機(jī)制能記住虛擬地址空間中的某個(gè)數(shù)據(jù)被放到了哪個(gè)物理內(nèi)存地址上,這就是所謂的地址空間映射冕香,也就是虛擬內(nèi)存地址與物理內(nèi)存地址的映射關(guān)系蛹尝,那么操作系統(tǒng)是如何記住這種映射關(guān)系的呢,答案是突那,有了頁表就可以將虛擬地址轉(zhuǎn)換為物理內(nèi)存地址了,這種機(jī)制就是虛擬內(nèi)存构眯。
每個(gè)進(jìn)程都有自己的虛擬地址空間愕难,進(jìn)程內(nèi)的所有線程共享進(jìn)程的虛擬地址空間。
那么到底為什么進(jìn)程切換開銷大,線程切換開銷低呢
我們已經(jīng)知道了進(jìn)程都有自己的虛擬地址空間,把虛擬地址轉(zhuǎn)換為物理地址需要查找頁表猫缭,頁表查找是一個(gè)很慢的過程葱弟,因此通常使用芝加,我們不需要關(guān)心這個(gè)名字只需要知道TLB本質(zhì)上就是一個(gè)cache,是用來加速頁表查找的射窒。由于每個(gè)進(jìn)程都有自己的虛擬地址空間藏杖,那么顯然每個(gè)進(jìn)程都有自己的頁表,那么
脉顿,
,表現(xiàn)出來的就是程序運(yùn)行會(huì)變慢艾疟,而線程切換則不會(huì)導(dǎo)致TLB失效祥楣,因?yàn)榫€程線程無需切換地址空間,因此我們通常說線程切換要比較進(jìn)程切換塊汉柒,原因就在這里误褪。
ps:
如果大家需要了解一下進(jìn)程,線程狀態(tài)轉(zhuǎn)換,信息的保存
這里大家要熟悉一下PCB進(jìn)程控制塊以及寄存器和計(jì)數(shù)器