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)。如果應用程式的代碼進入無限迴圈,與那個代碼關聯的進程會“凍結”,但其他進程(他們有自己的線程)不會凍結:他們會繼續執行。