乙個程式就是乙個程序,而乙個程式中的多個任務則被稱為執行緒。程序是表示資源分配的基本單位,又是排程執行的基本單位。執行緒是程序中執行運算的最小單位,亦即執行處理機排程的基本單位。 程序和執行緒的關係
(1)乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,但至少有乙個執行緒。執行緒是作業系統可識別的最小執行和排程單位。
(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。同一程序中的多個執行緒共享**段(**和常量),資料段(全域性變數和靜態變數),擴充套件段(堆儲存)。但是每個執行緒擁有自己的棧段,棧段又叫執行時段,用來存放所有區域性變數和臨時變數。
(3)處理機分給執行緒,即真正在處理機上執行的是執行緒。
(4)執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。
如果把上課的過程比作程序,那麼每個學生就是乙個執行緒,他們共享教室,即執行緒共享程序的記憶體空間。每乙個時刻,只能乙個學生問老師問題,老師回答完畢,輪到下乙個。即執行緒在乙個時間片內占有cpu
乙個關於程序和執行緒的例子:
試想當兩個程式設計師在兩個獨立的辦公室一起做乙個軟體專案,他們可以安靜地工作、不互相干擾,並且他們人手一套參考手冊。但是,他們溝通起來就有些困難,比起可以直接互相交談,他們必須使用**、電子郵件或到對方的辦公室進行直接交流。並且,管理兩個辦公室需要有一定的經費支出,還需要購買多份參考手冊。
假設,讓開發人員同在一間辦公室辦公,他們可以自由的對某個應用程式設計進行討論,也可以在紙或白板上輕易的繪製圖表,對設計觀點進行輔助性闡釋。現在,你只需要管理乙個辦公室,只要有一套參考資料就夠了。遺憾的是,開發人員可能難以集中注意力,並且還可能存在資源共享的問題(比如,「參考手冊哪去了?」)
以上兩種方法,描繪了併發的兩種基本途徑。每個開發人員代表乙個執行緒,每個辦公室代表乙個處理器。第一種途徑是有多個單執行緒的程序,這就類似讓每個開發人員擁有自己的辦公室,而第二種途徑是在單一程序裡有多個執行緒,如同乙個辦公室裡有兩個開發人員。讓我們在乙個應用程式中簡單的分析一下這兩種途徑。
位址空間共享,以及缺少執行緒間資料的保護,使得作業系統的記錄工作量減少,所以使用多執行緒相關的開銷遠小於使用多個程序,不過,共享記憶體的靈活性是有代價的:如果資料要被多個執行緒訪問,那麼程式設計師必須確保每個執行緒所訪問到的資料是一致的。
程序和執行緒的比較
排程 執行緒是cpu排程和分派的基本單位。擁有資源 程序是系統中程式執行和資源分配的基本單位。執行緒自己一般不擁有資源 除了必不可少的程式計數器,一組暫存器和棧 但它可以去訪問qi其所屬組的資源,如程序 段,資料段以及系統資源 已開啟的檔案,i o裝置等 系統開銷 同一程序中的多個執行緒可共享同一位...
執行緒程序比較
主程序結束後,子程序會結束不再執行,可以呼叫join 穿件執行緒和程序差不多 執行緒需要開啟,可以阻塞 import threading,time def t fun 子執行緒入口函式 print time.sleep 1 def time check fun p 統計時間的裝飾函式 def fun...
程序與執行緒的比較
程序 是資源分配的基本單位。所有與該程序有關的資源,都被記錄在程序控制塊pcb中。程序 處理機的排程單位,擁有完整的虛擬位址空間。當程序發生排程時,不同的程序擁有不同的虛擬位址空間,而同一程序內的不同執行緒共享同一位址空間。聯絡 1 執行緒與資源分配無關,屬於某乙個程序,並與其他執行緒共享程序資源。...