線程和進(jìn)程的區(qū)別
線程和進(jìn)程二者都有優(yōu)先級(jí)的概念,那么他們兩個(gè)的區(qū)別在哪里呢?本文是YJBYS小編整理的線程和進(jìn)程的區(qū)別,僅供參考。
進(jìn)程是什么?
程序并不能單獨(dú)運(yùn)行,只有將程序裝載到內(nèi)存中,系統(tǒng)為它分配資源才能運(yùn)行,而這種執(zhí)行的程序就稱之為進(jìn)程。程序和進(jìn)程的區(qū)別就在于:程序是指令的集合,它是進(jìn)程運(yùn)行的靜態(tài)描述文本;進(jìn)程是程序的一次執(zhí)行活動(dòng),屬于動(dòng)態(tài)概念。
在多道編程中,我們?cè)试S多個(gè)程序同時(shí)加載到內(nèi)存中,在操作系統(tǒng)的調(diào)度下,可以實(shí)現(xiàn)并發(fā)地執(zhí)行。這是這樣的設(shè)計(jì),大大提高了CPU的利用率。進(jìn)程的出現(xiàn)讓每個(gè)用戶感覺(jué)到自己獨(dú)享CPU,因此,進(jìn)程就是為了在CPU上實(shí)現(xiàn)多道編程而提出的。
有了進(jìn)程為什么還要線程?
進(jìn)程有很多優(yōu)點(diǎn),它提供了多道編程,讓我們感覺(jué)我們每個(gè)人都擁有自己的CPU和其他資源,可以提高計(jì)算機(jī)的利用率。很多人就不理解了,既然進(jìn)程這么優(yōu)秀,為什么還要線程呢?其實(shí),仔細(xì)觀察就會(huì)發(fā)現(xiàn)進(jìn)程還是有很多缺陷的,主要體現(xiàn)在兩點(diǎn)上:
進(jìn)程只能在一個(gè)時(shí)間干一件事,如果想同時(shí)干兩件事或多件事,進(jìn)程就無(wú)能為力了。
進(jìn)程在執(zhí)行的過(guò)程中如果阻塞,例如等待輸入,整個(gè)進(jìn)程就會(huì)掛起,即使進(jìn)程中有些工作不依賴于輸入的數(shù)據(jù),也將無(wú)法執(zhí)行。
如果這兩個(gè)缺點(diǎn)理解比較困難的話,舉個(gè)現(xiàn)實(shí)的例子也許你就清楚了:如果把我們上課的過(guò)程看成一個(gè)進(jìn)程的話,那么我們要做的是耳朵聽(tīng)老師講課,手上還要記筆記,腦子還要思考問(wèn)題,這樣才能高效的完成聽(tīng)課的任務(wù)。而如果只提供進(jìn)程這個(gè)機(jī)制的話,上面這三件事將不能同時(shí)執(zhí)行,同一時(shí)間只能做一件事,聽(tīng)的時(shí)候就不能記筆記,也不能用腦子思考,這是其一;如果老師在黑板上寫(xiě)演算過(guò)程,我們開(kāi)始記筆記,而老師突然有一步推不下去了,阻塞住了,他在那邊思考著,而我們呢,也不能干其他事,即使你想趁此時(shí)思考一下剛才沒(méi)聽(tīng)懂的一個(gè)問(wèn)題都不行,這是其二。
現(xiàn)在你應(yīng)該明白了進(jìn)程的缺陷了,而解決的辦法很簡(jiǎn)單,我們完全可以讓聽(tīng)、寫(xiě)、思三個(gè)獨(dú)立的過(guò)程,并行起來(lái),這樣很明顯可以提高聽(tīng)課的效率。而實(shí)際的操作系統(tǒng)中,也同樣引入了這種類似的'機(jī)制——線程。
線程的優(yōu)點(diǎn)
因?yàn)橐l(fā),我們發(fā)明了進(jìn)程,又進(jìn)一步發(fā)明了線程。只不過(guò)進(jìn)程和線程的并發(fā)層次不同:進(jìn)程屬于在處理器這一層上提供的抽象;線程則屬于在進(jìn)程這個(gè)層次上再提供了一層并發(fā)的抽象。如果我們進(jìn)入計(jì)算機(jī)體系結(jié)構(gòu)里,就會(huì)發(fā)現(xiàn),流水線提供的也是一種并發(fā),不過(guò)是指令級(jí)的并發(fā)。這樣,流水線、線程、進(jìn)程就從低到高在三個(gè)層次上提供我們所迫切需要的并發(fā)!
除了提高進(jìn)程的并發(fā)度,線程還有個(gè)好處,就是可以有效地利用多處理器和多核計(jì)算機(jī),F(xiàn)在的處理器有個(gè)趨勢(shì)就是朝著多核方向發(fā)展,在沒(méi)有線程之前,多核并不能讓一個(gè)進(jìn)程的執(zhí)行速度提高,原因還是上面所有的兩點(diǎn)限制。但如果講一個(gè)進(jìn)程分解為若干個(gè)線程,則可以讓不同的線程運(yùn)行在不同的核上,從而提高了進(jìn)程的執(zhí)行速度。
例如:我們經(jīng)常使用微軟的Word進(jìn)行文字排版,實(shí)際上就打開(kāi)了多個(gè)線程。這些線程一個(gè)負(fù)責(zé)顯示,一個(gè)接受鍵盤的輸入,一個(gè)進(jìn)行存盤等等。這些線程一起運(yùn)行,讓我們感覺(jué)到我們輸入和屏幕顯示同時(shí)發(fā)生,而不是輸入一些字符,過(guò)一段時(shí)間才能看到顯示出來(lái)。在我們不經(jīng)意間,還進(jìn)行了自動(dòng)存盤操作。這就是線程給我們帶來(lái)的方便之處。
進(jìn)程與線程的區(qū)別
進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。
線程是進(jìn)程的一個(gè)實(shí)體, 是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。
一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程,同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。
進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒(méi)有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序 健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。
【線程和進(jìn)程的區(qū)別】相關(guān)文章:
設(shè)計(jì)并發(fā)服務(wù)器,使用多進(jìn)程與多線程有什么區(qū)別?12-03
關(guān)于linux查看進(jìn)程ps top區(qū)別09-30
ssat和托福的區(qū)別10-14
咖啡的種類和區(qū)別10-09
速錄和速記的區(qū)別10-01
綠茶和白茶的區(qū)別10-22
紋眉和畫(huà)眉的區(qū)別07-19
朗誦和播音的區(qū)別09-04