很多同學都聽說過,現代作業系統比如mac os x,unix,linux,windows等,都是支援「多工」的作業系統。
什麼叫「多工」呢?簡單地說,就是作業系統可以同時執行多個任務。打個比方,你一邊在用瀏覽器上網,一邊在聽***,一邊在用word趕作業,這就是多工,至少同時有3個任務正在執行。還有很多任務悄悄地在後台同時執行著,只是桌面上沒有顯示而已。
現在,多核cpu已經非常普及了,但是,即使過去的單核cpu,也可以執行多工。由於cpu執行**都是順序執行的,那麼,單核cpu是怎麼執行多工的呢?
答案就是作業系統輪流讓各個任務交替執行,任務1執行0.01秒,切換到任務2,任務2執行0.01秒,再切換到任務3,執行0.01秒……這樣反覆執行下去。表面上看,每個任務都是交替執行的,但是,由於cpu的執行速度實在是太快了,我們感覺就像所有任務都在同時執行一樣。
真正的並行執行多工只能在多核cpu上實現,但是,由於任務數量遠遠多於cpu的核心數量,所以,作業系統也會自動把很多任務輪流排程到每個核心上執行。
對於作業系統來說,乙個任務就是乙個程序(process),比如開啟乙個瀏覽器就是啟動乙個瀏覽器程序,開啟乙個記事本就啟動了乙個記事本程序,開啟兩個記事本就啟動了兩個記事本程序,開啟乙個word就啟動了乙個word程序。
有些程序還不止同時幹一件事,比如word,它可以同時進行打字、拼寫檢查、列印等事情。在乙個程序內部,要同時幹多件事,就需要同時執行多個「子任務」,我們把程序內的這些「子任務」稱為執行緒(thread)。
由於每個程序至少要幹一件事,所以,乙個程序至少有乙個執行緒。當然,像word這種複雜的程序可以有多個執行緒,多個執行緒可以同時執行,多執行緒的執行方式和多程序是一樣的,也是由作業系統在多個執行緒之間快速切換,讓每個執行緒都短暫地交替執行,看起來就像同時執行一樣。當然,真正地同時執行多執行緒需要多核cpu才可能實現。
引入執行緒的好處
(1)易於排程。
(2)提高併發性。通過執行緒可方便有效地實現併發性。程序可建立多個執行緒來執行同一程式的不同部分。
(3)開銷少。建立執行緒比建立程序要快,所需開銷很少。。
(4)利於充分發揮多處理器的功能。通過建立多執行緒程序(即乙個程序可具有兩個或更多個執行緒),每個執行緒在乙個處理器上執行,從而實現應用程式的併發性,使每個處理器都得到充分執行。
程序和執行緒的關係
(1)乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,但至少有乙個執行緒。執行緒是作業系統可識別的最小執行和排程單位。
(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。 同一程序中的多個執行緒共享**段(**和常量),資料段(全域性變數和靜態變數),擴充套件段(堆儲存)。但是每個執行緒擁有自己的棧段,棧段又叫執行時段,用來存放所有區域性變數和臨時變數。
(3)處理機分給執行緒,即真正在處理機上執行的是執行緒。
(4)執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步
多執行緒相關的概念
1,程式和程序的區別 程式是乙個固定的邏輯和資料的集合,是乙個靜止的狀態,一般儲存在硬碟上。程序是乙個正在執行的程式,是乙個動作的狀態,一般在記憶體中。2.程序和執行緒 程序是乙個正在執行的程式,有自己獨立的資源分配。執行緒是一條獨立的執行路徑,在執行某個程式的時候,該程式可以有很多的子任務,每個執...
MFC 多執行緒程式設計相關
不知道大家在 mfc 程式設計時有沒有遇到過這樣乙個問題,當乙個程式用到比較複雜的計算或者僅僅就是觸發乙個死迴圈,整個畫面就卡死在那裡不動了?這是因為程式一直在執行著該計算,根本無暇對其他的訊息做出響應,這樣導致的結果是使用者體驗非常差,而且程式效率十分低下。多執行緒可以幫助我們解決這個問題,其原理...
C 多執行緒 一 多執行緒的相關概念
什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式。什麼是多執行緒...