進(jìn)程是指運(yùn)行中的應(yīng)用程序,每一個(gè)進(jìn)程都有自己獨(dú)立的內(nèi)存空間。一個(gè)應(yīng)用程序可以同時(shí)啟動(dòng)多個(gè)進(jìn)程。例如對(duì)于IE瀏覽器程序,每打開一個(gè)IE瀏覽器窗口,就啟動(dòng)了一個(gè)新的進(jìn)程。同樣,每次執(zhí)行JDK的java.exe程序,就啟動(dòng)了一個(gè)獨(dú)立的Java虛擬機(jī)進(jìn)程
進(jìn)程與線程的區(qū)別?進(jìn)程與線程的區(qū)別 進(jìn)程與線程的區(qū)別
方法
進(jìn)程:指在系統(tǒng)中能獨(dú)立運(yùn)行并作為資源分配的基本單位,它是由一組機(jī)器指令、數(shù)據(jù)和堆棧等組成的,是一個(gè)能獨(dú)立運(yùn)行的活動(dòng)實(shí)體。
進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性。進(jìn)程和線程的區(qū)別在于: 線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性搞。 另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)
進(jìn)程一般有三個(gè)狀態(tài):就緒狀態(tài)、執(zhí)行狀態(tài)和等待狀態(tài)【或稱阻塞狀態(tài)】;進(jìn)程只能由父進(jìn)程建立,系統(tǒng)中所有的進(jìn)程形成一種進(jìn)程樹的層次體系;掛起命令可由進(jìn)程自己和其他進(jìn)程發(fā)出,但是解除掛起命令只能由其他進(jìn)程發(fā)出。
程序(program)只是一組指令的有序集合。 任務(wù)(task)是最抽象的,是一個(gè)一般性的術(shù)語,指由軟件完成的一個(gè)活動(dòng)。一個(gè)任務(wù)既可以是一個(gè)進(jìn)程,也可以是一個(gè)線程。簡(jiǎn)而言之,它指的是一系列共同達(dá)到某一目的的操作。例如,讀取數(shù)據(jù)并將數(shù)據(jù)放入內(nèi)存中。這
由程序段、相關(guān)的數(shù)據(jù)段和PCB三部分構(gòu)成了進(jìn)程實(shí)體(又稱進(jìn)程印像),一般,我們把進(jìn)程實(shí)體就簡(jiǎn)稱為進(jìn)程。
1、功能不同 進(jìn)程是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基矗 線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。 2、工作原理不同 在
進(jìn)程的特征:
線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體. 與進(jìn)程的區(qū)別: (1)地址空間:進(jìn)程內(nèi)的一個(gè)執(zhí)行單元;進(jìn)程至少有一個(gè)線程;它們共享進(jìn)程的地址空間;而進(jìn)程有自己獨(dú)立的地址空間; (2)資源擁有:進(jìn)程是資源分配和擁有的單位,同一個(gè)進(jìn)程內(nèi)的線程
1.動(dòng)態(tài)性:進(jìn)程的實(shí)質(zhì)是程序的一次執(zhí)行過程,進(jìn)程是動(dòng)態(tài)產(chǎn)生,動(dòng)態(tài)消亡的。
進(jìn)程優(yōu)點(diǎn):每個(gè)進(jìn)程互相獨(dú)立,不影響主程序的穩(wěn)定性,子進(jìn)程崩潰沒關(guān)系; 缺點(diǎn):需要跨進(jìn)程邊界,如果有大數(shù)據(jù)量傳送,就不太好,適合小數(shù)據(jù)量傳送、密集運(yùn)算 多進(jìn)程調(diào)度開銷比較大。 線程優(yōu)點(diǎn):無需跨進(jìn)程邊界; 缺點(diǎn):每個(gè)線程與主程序共用地
2.并發(fā)性:任何進(jìn)程都可以同其他進(jìn)程一起并發(fā)執(zhí)行。
進(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)資源,只擁有一
3.獨(dú)立性:進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的基本單位,同時(shí)也是系統(tǒng)分配資源和調(diào)度的獨(dú)立單位。
線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體. 與進(jìn)程的區(qū)別: (1)地址空間:進(jìn)程內(nèi)的一個(gè)執(zhí)行單元;進(jìn)程至少有一個(gè)線程;它們共享進(jìn)程的地址空間;而進(jìn)程有自己獨(dú)立的地址空間; (2)資源擁有:進(jìn)程是資源分配和擁有的單位,同一個(gè)進(jìn)程內(nèi)的線程
4.異步性:由于進(jìn)程間的相互制約,使進(jìn)程具有執(zhí)行的間斷性,即進(jìn)程按各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn)。
一個(gè)程序就是一個(gè)進(jìn)程,而一個(gè)程序中的多個(gè)任務(wù)則被稱為線程。進(jìn)程是表示資源分配的基本單位,又是調(diào)度運(yùn)行的基本單位。線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位,亦即執(zhí)行處理機(jī)調(diào)度的基本單位。 進(jìn)程和線程的關(guān)系 (1)一個(gè)線程只能屬于一個(gè)進(jìn)程,而一
線程:線程是進(jìn)程中的一個(gè)實(shí)體,作為系統(tǒng)調(diào)度和分派的基本單位。Linux下的線程看作輕量級(jí)進(jìn)程。
一個(gè)程序就是一個(gè)進(jìn)程,而一個(gè)程序中的多個(gè)任務(wù)則被稱為線程。進(jìn)程是表示資源分配的基本單位,又是調(diào)度運(yùn)行的基本單位。線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位,亦即執(zhí)行處理機(jī)調(diào)度的基本單位。 進(jìn)程和線程的關(guān)系 (1)一個(gè)線程只能屬于一個(gè)進(jìn)程,而一
線程的性質(zhì):
進(jìn)程間是獨(dú)立的,這表現(xiàn)在內(nèi)存空間,上下文環(huán)境;線程運(yùn)行在進(jìn)程空間內(nèi)。一般來講(不使用特殊技術(shù))進(jìn)程是無法突破進(jìn)程邊界存取其他進(jìn)程內(nèi)的存儲(chǔ)空間;而線程由于處于進(jìn)程空間內(nèi),所以同一進(jìn)程所產(chǎn)生的線程共享同一內(nèi)存空間。同一進(jìn)程中的兩段
1.線程是進(jìn)程內(nèi)的一個(gè)相對(duì)獨(dú)立的可執(zhí)行的單元。若把進(jìn)程稱為任務(wù)的話,那么線程則是應(yīng)用中的一個(gè)子任務(wù)的執(zhí)行。
進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性。進(jìn)程和線程的區(qū)別在于: 線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性搞。 另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)
2.由于線程是被調(diào)度的基本單元,而進(jìn)程不是調(diào)度單元。所以,每個(gè)進(jìn)程在創(chuàng)建時(shí),至少需要同時(shí)為該進(jìn)程創(chuàng)建一個(gè)線程。即進(jìn)程中至少要有一個(gè)或一個(gè)以上的線程,否則該進(jìn)程無法被調(diào)度執(zhí)行。
進(jìn)程和線程的區(qū)別和聯(lián)系 1.進(jìn)程有自己獨(dú)立的地址空間;而線程共享進(jìn)程的地址空間; 2.一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程; 3.線程是處理器調(diào)度的基本單位,但進(jìn)程不是; 4.二者均可并發(fā)執(zhí)行 多線程比多進(jìn)程成本低,但性能更低。 在UN
3.進(jìn)程是被分給并擁有資源的基本單元。同一進(jìn)程內(nèi)的多個(gè)線程共享該進(jìn)程的資源,但線程并不擁有資源,只是使用他們。
要了解二者的區(qū)別與聯(lián)系,首先得對(duì)進(jìn)程與線程有一個(gè)宏觀上的了解。 進(jìn)程,是并發(fā)執(zhí)行的程序在執(zhí)行過程中分配和管理資源的基本單位,是一個(gè)動(dòng)態(tài)概念,竟?fàn)幱?jì)算機(jī)系統(tǒng)資源的基本單位。每一個(gè)進(jìn)程都有一個(gè)自己的地址空間,即進(jìn)程空間或(虛空間)。
4.線程是操作系統(tǒng)中基本調(diào)度單元,因此線程中應(yīng)包含有調(diào)度所需要的必要信息,且在生命周期中有狀態(tài)的變化。
線程與進(jìn)程的區(qū)別: 1.地址空間和其它資源:進(jìn)程間相互獨(dú)立,同一進(jìn)程的各線程間共享。某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見。 2.通信:進(jìn)程間通信IPC,線程間可以直接讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來進(jìn)行通信——需要進(jìn)程同步和互斥手段的輔助,以保證
5.由于共享資源【包括數(shù)據(jù)和文件】,所以線程間需要通信和同步機(jī)制,且需要時(shí)線程可以創(chuàng)建其他線程,但線程間不存在父子關(guān)系。
程序 是計(jì)算機(jī)指令的集合它,以文件的形式存儲(chǔ)在磁盤上。 進(jìn)程是一個(gè)程序在其 自身的地址空間中的一次執(zhí)行活動(dòng)。 進(jìn)程是資源申請(qǐng)、調(diào)度和獨(dú)立運(yùn)行的單位,因此,它使用系統(tǒng)中的運(yùn)行資源,而程序不能申請(qǐng)系統(tǒng)資源,不能被系統(tǒng)調(diào)度,也不能作為獨(dú)
擴(kuò)展閱讀,以下內(nèi)容您可能還感興趣。
進(jìn)程與線程的區(qū)別,線程安全”怎么理解
一個(gè)程序就是一個(gè)進(jìn)程,而一個(gè)程序中的多個(gè)任務(wù)則被稱為線程。進(jìn)程是表示資源分配的基本單位,又是調(diào)度運(yùn)行的基本單位。線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位,亦即執(zhí)行處理機(jī)調(diào)度的基本單位。 進(jìn)程和線程的關(guān)系
(1)一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程。線程是操作系統(tǒng)可識(shí)別的最小執(zhí)行和調(diào)度單位。
(2)資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源。同一進(jìn)程中的多個(gè)線程共享代碼段(代碼和常量),數(shù)據(jù)段(全局變量和靜態(tài)變量),擴(kuò)展段(堆存儲(chǔ))。但是每個(gè)線程擁有自己的棧段,棧段又叫運(yùn)行時(shí)段,用來存放所有局部變量和臨時(shí)變量。
(3)處理機(jī)分給線程,即真正在處理機(jī)上運(yùn)行的是線程。
(4)線程在執(zhí)行過程中,需要協(xié)作同步。不同進(jìn)程的線程間要利用消息通信的辦法實(shí)現(xiàn)同步。
如果把上課的過程比作進(jìn)程,那么每個(gè)學(xué)生就是一個(gè)線程,他們共享教室,即線程共享進(jìn)程的內(nèi)存空間。每一個(gè)時(shí)刻,只能一個(gè)學(xué)生問老師問題,老師回答完畢,輪到下一個(gè)。即線程在一個(gè)時(shí)間片內(nèi)占有cpu。
進(jìn)程與線程的區(qū)別
進(jìn)程間是獨(dú)立的,這表現(xiàn)在內(nèi)存空間,上下文環(huán)境;線程運(yùn)行在進(jìn)程空間內(nèi)。一般來講(不使用特殊技術(shù))進(jìn)程是無法突破進(jìn)程邊界存取其他進(jìn)程內(nèi)的存儲(chǔ)空間;而線程由于處于進(jìn)程空間內(nèi),所以同一進(jìn)程所產(chǎn)生的線程共享同一內(nèi)存空間。同一進(jìn)程中的兩段代碼不能夠同時(shí)執(zhí)行,除非引入線程。線程是屬于進(jìn)程的,當(dāng)進(jìn)程退出時(shí)該進(jìn)程所產(chǎn)生的線程都會(huì)被強(qiáng)制退出并清除。線程占用的資源要少于進(jìn)程所占用的資源。進(jìn)程和線程都可以有優(yōu)先級(jí)。在線程系統(tǒng)中進(jìn)程也是一個(gè)線程??梢詫⑦M(jìn)程理解為一個(gè)程序的第一個(gè)線程。
進(jìn)程與線程的區(qū)別和聯(lián)系
進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性。進(jìn)程和線程的區(qū)別在于:
線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性搞。
另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。
線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。
從邏輯角度來看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。
進(jìn)程(Process)是最初定義在Unix等多用戶、多任務(wù)操作系統(tǒng)環(huán)境下用于表示應(yīng)用程序在內(nèi)存環(huán)境中基本執(zhí)行單元的概念。以Unix操作系統(tǒng)為例,進(jìn)程是Unix操作系統(tǒng)環(huán)境中的基本成分、是系統(tǒng)資源分配的基本單位。Unix操作系統(tǒng)中完成的幾乎所有用戶管理和資源分配等工作都是通過操作系統(tǒng)對(duì)應(yīng)用程序進(jìn)程的控制來實(shí)現(xiàn)的。
線程與進(jìn)程的區(qū)別及優(yōu)缺點(diǎn)分別是什么?
進(jìn)程和線程的區(qū)別和聯(lián)系
1.進(jìn)程有自己獨(dú)立的地址空間;而線程共享進(jìn)程的地址空間;
2.一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程;
3.線程是處理器調(diào)度的基本單位,但進(jìn)程不是;
4.二者均可并發(fā)執(zhí)行
多線程比多進(jìn)程成本低,但性能更低。
在UNIX環(huán)境,多進(jìn)程調(diào)度開銷比多線程調(diào)度開銷,沒有顯著區(qū)別,就是說,UNIX進(jìn)程調(diào)度效率是很高的。內(nèi)存消耗方面,二者只差全局?jǐn)?shù)據(jù)區(qū),現(xiàn)在內(nèi)存都很便宜,服務(wù)器內(nèi)存動(dòng)輒若干G,根本不是問題。
多進(jìn)程是立體交通系統(tǒng),雖然造價(jià)高,上坡下坡多耗點(diǎn)油,但是不堵車。
多線程是平面交通系統(tǒng),造價(jià)低,但紅綠燈太多,老堵車。
進(jìn)程和線程的區(qū)別
要了解二者的區(qū)別與聯(lián)系,首先得對(duì)進(jìn)程與線程有一個(gè)宏觀上的了解。
進(jìn)程,是并發(fā)執(zhí)行的程序在執(zhí)行過程中分配和管理資源的基本單位,是一個(gè)動(dòng)態(tài)概念,竟?fàn)幱?jì)算機(jī)系統(tǒng)資源的基本單位。每一個(gè)進(jìn)程都有一個(gè)自己的地址空間,即進(jìn)程空間或(虛空間)。進(jìn)程空間的大小 只與處理機(jī)的位數(shù)有關(guān),一個(gè) 16 位長(zhǎng)處理機(jī)的進(jìn)程空間大小為 216 ,而 32 位處理機(jī)的進(jìn)程空間大小為 232 。進(jìn)程至少有 5 種基本狀態(tài),它們是:初始態(tài),執(zhí)行態(tài),等待狀態(tài),就緒狀態(tài),終止?fàn)顟B(tài)。
線程,在網(wǎng)絡(luò)或多用戶環(huán)境下,一個(gè)服務(wù)器通常需要接收大量且不確定數(shù)量用戶的并發(fā)請(qǐng)求,為每一個(gè)請(qǐng)求都創(chuàng)建一個(gè)進(jìn)程顯然是行不通的,——無論是從系統(tǒng)資源開銷方面或是響應(yīng)用戶請(qǐng)求的效率方面來看。因此,操作系統(tǒng)中線程的概念便被引進(jìn)了。線程,是進(jìn)程的一部分,一個(gè)沒有線程的進(jìn)程可以被看作是單線程的。線程有時(shí)又被稱為輕權(quán)進(jìn)程或輕量級(jí)進(jìn)程,也是 CPU 調(diào)度的一個(gè)基本單位。
說到這里,我們對(duì)進(jìn)程與線程都有了一個(gè)大體上的印象,現(xiàn)在開始說說二者大致的區(qū)別。
進(jìn)程的執(zhí)行過程是線狀的,盡管中間會(huì)發(fā)生中斷或暫停,但該進(jìn)程所擁有的資源只為該線狀執(zhí)行過程服務(wù)。一旦發(fā)生進(jìn)程上下文切換,這些資源都是要被保護(hù)起來的。這是進(jìn)程宏觀上的執(zhí)行過程。而進(jìn)程又可有單線程進(jìn)程與多線程進(jìn)程兩種。我們知道,進(jìn)程有 一個(gè)進(jìn)程控制塊 PCB ,相關(guān)程序段 和 該程序段對(duì)其進(jìn)行操作的數(shù)據(jù)結(jié)構(gòu)集 這三部分,單線程進(jìn)程的執(zhí)行過程在宏觀上是線性的,微觀上也只有單一的執(zhí)行過程;而多線程進(jìn)程在宏觀上的執(zhí)行過程同樣為線性的,但微觀上卻可以有多個(gè)執(zhí)行操作(線程),如不同代碼片段以及相關(guān)的數(shù)據(jù)結(jié)構(gòu)集。線程的改變只代表了 CPU 執(zhí)行過程的改變,而沒有發(fā)生進(jìn)程所擁有的資源變化。出了 CPU 之外,計(jì)算機(jī)內(nèi)的軟硬件資源的分配與線程無關(guān),線程只能共享它所屬進(jìn)程的資源。與進(jìn)程控制表和 PCB 相似,每個(gè)線程也有自己的線程控制表 TCB ,而這個(gè) TCB 中所保存的線程狀態(tài)信息則要比 PCB 表少得多,這些信息主要是相關(guān)指針用堆棧(系統(tǒng)棧和用戶棧),寄存器中的狀態(tài)數(shù)據(jù)。進(jìn)程擁有一個(gè)完整的虛擬地址空間,不依賴于線程而獨(dú)立存在;反之,線程是進(jìn)程的一部分,沒有自己的地址空間,與進(jìn)程內(nèi)的其他線程一起共享分配給該進(jìn)程的所有資源。
線程可以有效地提高系統(tǒng)的執(zhí)行效率,但并不是在所有計(jì)算機(jī)系統(tǒng)中都是適用的,如某些很少做進(jìn)程調(diào)度和切換的實(shí)時(shí)系統(tǒng)。使用線程的好處是有多個(gè)任務(wù)需要處理機(jī)處理時(shí),減少處理機(jī)的切換時(shí)間;而且,線程的創(chuàng)建和結(jié)束所需要的系統(tǒng)開銷也比進(jìn)程的創(chuàng)建和結(jié)束要小得多。最適用使用線程的系統(tǒng)是多處理機(jī)系統(tǒng)和網(wǎng)絡(luò)系統(tǒng)或分布式系統(tǒng)。
----------------------------------
1. 線程的執(zhí)行特性。
線程只有 3 個(gè)基本狀態(tài):就緒,執(zhí)行,阻塞。
線程存在 5 種基本操作來切換線程的狀態(tài):派生,阻塞,激活,調(diào)度,結(jié)束。
2. 進(jìn)程通信。
單機(jī)系統(tǒng)中進(jìn)程通信有 4 種形式:主從式,會(huì)話式,消息或郵箱機(jī)制,共享存儲(chǔ)區(qū)方式。
主從式典型例子:終端控制進(jìn)程和終端進(jìn)程。
會(huì)話式典型例子:用戶進(jìn)程與磁盤管理進(jìn)程之間的通信。