進(jìn)程是程序運(yùn)行和資源分配的基本單位拘哨,一個(gè)程序至少有一個(gè)進(jìn)程锡溯,一個(gè)進(jìn)程至少有一個(gè)線程赶舆。進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存資源祭饭,減少切換次數(shù)芜茵,從而效率更高。線程是進(jìn)程的一個(gè)實(shí)體倡蝙,是CPU調(diào)度和分配的基本單位九串,是比程序更小的能獨(dú)立運(yùn)行的基本單位。同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。
做個(gè)簡(jiǎn)單的比喻:進(jìn)程=火車猪钮,線程=車廂
● 線程在進(jìn)程下行進(jìn)(單純的車廂無(wú)法運(yùn)行)
● 一個(gè)進(jìn)程可以包含多個(gè)線程(一輛火車可以有多個(gè)車廂)
● 不同進(jìn)程間數(shù)據(jù)很難共享(一輛火車上的乘客很難換到另外一輛火車品山,比如站點(diǎn)換乘)
● 同一進(jìn)程下不同線程間數(shù)據(jù)很易共享(A車廂換到B車廂很容易)
● 進(jìn)程要比線程消耗更多的計(jì)算機(jī)資源(采用多列火車相比多個(gè)車廂更耗資源)
● 進(jìn)程間不會(huì)相互影響,一個(gè)線程掛掉將導(dǎo)致整個(gè)進(jìn)程掛掉(一列火車不會(huì)影響到另外一列火車烤低,但是如果一列火車上中間的一節(jié)車廂著火了肘交,將影響到所有車廂)
● 進(jìn)程可以拓展到多機(jī),進(jìn)程最多適合多核(不同火車可以開在多個(gè)軌道上扑馁,同一火車的車廂不能在行進(jìn)的不同的軌道上)
● 進(jìn)程使用的內(nèi)存地址可以上鎖涯呻,即一個(gè)線程使用某些共享內(nèi)存時(shí),其他線程必須等它結(jié)束檐蚜,才能使用這一塊內(nèi)存魄懂。(比如火車上的洗手間)-"互斥鎖"
● 進(jìn)程使用的內(nèi)存地址可以限定使用量(比如火車上的餐廳,最多只允許多少人進(jìn)入闯第,如果滿了需要在門口等,等有人出來(lái)了才能進(jìn)去)-“信號(hào)量”