程序與執行緒的區別
定義:
一、程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,是系統進行資源分配和排程的一個獨立單位。
二、執行緒是程序的一個實體,是CPU排程和分派的基本單位,他是比程序更小的能獨立執行的基本單位,執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),一個執行緒可以建立和撤銷另一個執行緒;
程序和執行緒的關係:
(1)一個執行緒只能屬於一個程序,而一個程序可以有多個執行緒,但至少有一個執行緒。
(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。
(3)執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。
(4)處理機分給執行緒,即真正在處理機上執行的是執行緒。
(5)執行緒是指程序內的一個執行單元,也是程序內的可排程實體。
執行緒與程序的區別:
(1)排程:執行緒作為排程和分配的基本單位,程序作為擁有資源的基本單位。
(2)併發性:不僅程序之間可以併發執行,同一個程序的多個執行緒之間也可以併發執行。
(3)擁有資源:程序是擁有資源的一個獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於程序的資源。
(4)系統開銷:在建立或撤銷程序的時候,由於系統都要為之分配和回收資源,導致系統的明顯大於建立或撤銷執行緒時的開銷。同樣,多程序的程式要比多執行緒的程式在程序切換時,耗費的資源較大,效率要差些。
執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。
另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大的提高了程式執行效率。
執行緒在執行過程中,每個獨立的執行緒有一個程式執行的入口,順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,有應用程式提供多個執行緒執行控制。
從邏輯角度看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。