我之前一直把線程和進程搞混次伶,今天準備好好整理一下婉支。
官方解釋——什么是進程,什么是線程痢毒?
進程(Process)是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動送矩,是系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)哪替。在早期面向進程設(shè)計的計算機結(jié)構(gòu)中栋荸,進程是程序的基本執(zhí)行實體;在當代面向線程設(shè)計的計算機結(jié)構(gòu)中凭舶,進程是線程的容器晌块。程序是指令、數(shù)據(jù)及其組織形式的描述帅霜,進程是程序的實體
線程匆背,有時被稱為輕量級進程(Lightweight Process,LWP)身冀,是程序執(zhí)行流的最小單元钝尸。一個標準的線程由線程ID,當前指令指針(PC)闽铐,寄存器集合和堆棧組成蝶怔。另外奶浦,線程是進程中的一個實體兄墅,是被系統(tǒng)獨立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源澳叉,只擁有一點兒在運行中必不可少的資源隙咸,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創(chuàng)建和撤消另一個線程成洗,同一進程中的多個線程之間可以并發(fā)執(zhí)行五督。由于線程之間的相互制約,致使線程在運行中呈現(xiàn)出間斷性瓶殃。線程也有就緒充包、阻塞和運行三種基本狀態(tài)。就緒狀態(tài)是指線程具備運行的所有條件遥椿,邏輯上可以運行基矮,在等待處理機;運行狀態(tài)是指線程占有處理機正在運行冠场;阻塞狀態(tài)是指線程在等待一個事件(如某個信號量)家浇,邏輯上不可執(zhí)行。每一個程序都至少有一個線程碴裙,若程序只有一個線程钢悲,那就是程序本身点额。
看了標準解釋,還是有點暈暈的莺琳。
形象比喻理解
(我自己的理解哈还棱,不一定正確)
一個進程
比如現(xiàn)在有一個任務(wù),就是要做一個保溫杯芦昔,只有我一個人诱贿,那我拿到材料和工具以后范删,我就先做了一個杯子的身體诡延,然后我做了杯子的蓋子周叮,最好以后把工具還回去去侥袜,結(jié)束任務(wù)锌蓄。
多個進程
其實可以理解為多個任務(wù)召锈,比如現(xiàn)在要做一個保溫杯和買暖寶寶渐扮。然后有我和小白兩個人柑贞,然后把工具給我嫂伞,我去制作保溫杯孔厉,把錢給小白,他去買暖寶寶帖努,我做完以后把工具還回去撰豺,小白把多出來的錢還回去,任務(wù)結(jié)束
線程
可以理解為一個總?cè)蝿?wù)中的單個小任務(wù)(但是離不開開頭的環(huán)境配置和資源發(fā)放)拼余,比如有一個任務(wù)污桦,就是要做一個保溫杯,那個做杯蓋和杯子的杯身可以看做線程匙监。
多線程
接上個凡橱,就是要做一個保溫杯,那個做杯蓋和杯子的杯身可以看做線程⊥だ眩現(xiàn)在有兩個人稼钩,我和小白,我在做杯身的時候达罗,小白同時做杯蓋坝撑,那么這個就叫多線程,最后我們做完了粮揉,都要一起上交工具巡李。
意義何在
多個任務(wù)之間切換,節(jié)約計算時間
由于CPU與其他PC資源之間速度的不協(xié)調(diào)滔蝉,人們想提高資源利用率击儡,所以人們提出了多任務(wù)系統(tǒng)。得益于CPU的計算速度蝠引,我們可以“同時”運行多個任務(wù)阳谍,實質(zhì)上是多個任務(wù)之間輪流使用CPU資源蛀柴,由于速度超快,給用戶的感覺就是連續(xù)的矫夯。
進程之間是相互不影響的鸽疾,比如小白如果去買暖寶寶沒有回來,我還是會做完杯子训貌。但是制肮,線程之間屬于同一個任務(wù),小白如果沒有把杯蓋做完递沪,那么我只做了杯身豺鼻,所以任務(wù)還是沒有完成。
當然這個只是我自己想想的款慨,可能不是很清楚儒飒。
我們在平時跑生物信息軟件的時候,可能會發(fā)現(xiàn)檩奠,有些軟件可以-t 增加線程數(shù)量桩了,這可以極大地加快運算速度,因為這里采用了多線程運算埠戳,但是千萬不要設(shè)置太多井誉,因為服務(wù)器里面還有其他小伙伴在跑程序,你設(shè)置了太多整胃,可能會超過總數(shù)颗圣,造成服務(wù)器壓力,其他小伙伴的程序跑的就慢了爪模。