windows為什麼要支援執行緒,程序與執行緒的聯絡與區別是什麼?
在計算機的早期歲月,作業系統沒有提供執行緒概念。事實上整個系統只執行著乙個執行執行緒,其中同時包含作業系統**和應用程式。只用乙個執行執行緒的問題在於,長時間執行的任務會阻止其他任務執行。例如,在16位windows的那些日子,列印乙個文件的應用程式很容易「凍結」整個機器,造成os和其他應用程式停止響應。有的應用程式含有bug,會造成無限迴圈,這同樣會造成整個機器停止工作。
遇到這個問題,使用者只好按reset鍵或電源開關重啟計算機。使用者們對此感到深惡痛絕(事實上,現在一樣會),因為所有正在執行的應用程式都會終止。更重要的是,這些應用程式正在處理的資料都會無端地丟失。microsoft明白16位windows不是乙個理想的作業系統。隨著計算機工業的持續進步,它不足以保持microsoft的領先地位。所以,他們計畫構建乙個新的os來滿足企業和個人的需要。這個新的os必須健壯、可靠、易於伸縮一級安全,而且它必須改進16位windows的許多不足。這個os核心最初是在microsoft windows nt中發布的。經過多年的發展,這個核心已進行惡龍大量改進,新增了大量功能。microsoft每次發布客戶端和伺服器windows 作業系統的最新版本時,都在其中採用了這個核心的最新版本。
microsoft設計這個os核心時,他們決定在乙個程序(process)中執行應用程式的每個例項。程序不過是應用程式的乙個例項要使用的資源的合集。每個程序都被賦予乙個虛擬位址空間,確保乙個程序使用的**和資料無法由另乙個程序訪問。這就確保了應用程式例項的健壯性,因為乙個成成無法破壞另乙個程序所使用的**或資料。除此之外,os的核心**和資料時程序訪問不到的;所以,應用程式**破壞不了作業系統**或資料。由於應用程式**破壞不了其他應用程式或者os自身,所以使用者的計算體驗變得更好了。除此之外,系統變得比以往更安全,因為應用程式**無法訪問另乙個應用程式或者os自身使用的使用者名稱、密碼、信用卡資料或者其他敏感資訊。
聽起來似乎不錯,但cpu本身呢?如果乙個應用程式進入無限迴圈,會發生什麼?如果機器中只有乙個cpu,它會執行無限迴圈,不能執行其他然和東西。所以,雖然資料無法被破壞,而且更安全,但系統仍然可能停止響應。microsoft需要修正這個問題,他們拿出的方案就是執行緒。作為乙個windows概念,執行緒(thread)的職責是對cpu進行虛擬化。windows為每個程序都提供了該程序專用的執行緒(功能相當於乙個cpu,可將執行緒理解成乙個邏輯cpu)。如果應用程式的**進入無限迴圈,與那個**關聯的程序會「凍結」,但其他程序(他們有自己的執行緒)不會凍結:他們會繼續執行。
為什麼要執行緒同步
class mythread2 implements runnable catch interruptedexception e system.out.println thread.currentthread getname 賣票,ticket this.ticket else public cla...
為什麼要建立執行緒池
在有些工作場景中,比如說伺服器程式設計中,如果為每乙個客戶都分配乙個新的工作執行緒,並且當工作執行緒與客戶通訊結束時,這個執行緒被銷毀,這就需要頻繁的切換工作執行緒,這會帶來一些負擔,最主要的是系統大的開銷和系統資源不足問題。首先,伺服器建立和銷毀工作執行緒的開銷很大,如果伺服器與很多客戶端通訊,並...
為什麼要執行緒同步的例子
設定全域性變數g bcontinue,在主線程中設定全域性變數g bcontinue,工作執行緒檢測該全域性變數,實現主線程控制工作執行緒的目的 列印出的g cnt1與g cnt2的數值不同,是因為執行緒除錯時時間片的切換 counterror.cpp 定義控制台應用程式的入口點。include s...