程序,進(jìn)程和線程的區(qū)別

???????程序并不能單獨執(zhí)行,只有將程序加載到內(nèi)存中,系統(tǒng)為他分配資源后才能夠執(zhí)行,這種執(zhí)行的程序稱之為進(jìn)程,也就是說進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位,每個進(jìn)程都有自己單獨的地址空間。所以說程序與進(jìn)程的區(qū)別在于,程序是指令的集合,是進(jìn)程運(yùn)行的靜態(tài)描述文本,而進(jìn)程則是程序在系統(tǒng)上順序執(zhí)行時的動態(tài)活動。但是進(jìn)程存在著很多缺陷,主要集中在兩點:
???????(1).進(jìn)程只能在同一時間干一件事情,如果想同時干兩件事或多件事情,進(jìn)程就無能為力了。
???????(2).進(jìn)程在執(zhí)行的過程中如果由于某種原因阻塞了,例如等待輸入,整個進(jìn)程就會掛起,其他與輸入無關(guān)的工作也必須等待輸入結(jié)束后才能順序執(zhí)行。
???????為了解決上述兩點缺陷,引入了線程這個概念。線程是進(jìn)程的一個實體,也是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨立運(yùn)行的基本單位,有時又被稱為輕權(quán)進(jìn)程或輕量級進(jìn)程,相對進(jìn)程而言,線程是一個更加接近于執(zhí)行體的概念,進(jìn)程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而線程自己基本上不擁有系統(tǒng)資源,也沒有自己的地址空間,只擁有一點在運(yùn)行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),線程的改變只代表了 CPU 執(zhí)行過程的改變,而沒有發(fā)生進(jìn)程所擁有的資源變化。除了CPU 之外,計算機(jī)內(nèi)的軟硬件資源的分配與線程無關(guān),但是它可與同屬一個進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。
???????進(jìn)程和線程的主要差別在于操作系統(tǒng)并沒有將多個線程看作多個獨立的應(yīng)用,來實現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。進(jìn)程有獨立的地址空間,一個進(jìn)程崩潰后,在保護(hù)模式下不會對其它進(jìn)程產(chǎn)生影響,而線程只是一個進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時,耗費(fèi)資源較大,效率要差一些,對于一些要求同時進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程,每個獨立的線程有一個程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口,但是線程不能夠獨立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制。
???????總結(jié)一下進(jìn)程、線程的區(qū)別
???????1.進(jìn)程就是在操作系統(tǒng)上執(zhí)行的一個程序;比如:qq.exe
???????a.進(jìn)程之間沒有關(guān)系,都是相對獨立的
???????b.每個進(jìn)程獨享一部分內(nèi)存及其他系統(tǒng)資源
???????c.操作系統(tǒng)允許多進(jìn)程(任務(wù))處理模式
???????2.線程是進(jìn)程的一個實體表現(xiàn)
???????a.進(jìn)程由多個線程組成
???????b.一個進(jìn)程中的多個線程共享該進(jìn)程的資源
???????c.一個進(jìn)程中的多個線程支持并發(fā)(多線程)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容