** 進程和線程都是操作系統(tǒng)的概念平酿。進程是應(yīng)用程序的執(zhí)行實例,每個進程是由私有的虛擬地址空間羡疗、代碼、數(shù)據(jù)和其它各種系統(tǒng)資源組成别洪,即進程是操作系統(tǒng)進行資源分配的最小單元叨恨。進程在運行過程中創(chuàng)建的資源隨著進程的終止而被銷毀,所使用的系統(tǒng)資源在進程終止時被釋放或關(guān)閉挖垛。
線程是進程內(nèi)部的一個執(zhí)行單元痒钝。系統(tǒng)創(chuàng)建好進程后,實際上就啟動執(zhí)行了該進程的主執(zhí)行線程**痢毒,主執(zhí)行線程以函數(shù)地址形式送矩,比如說main或WinMain函數(shù),將程序的啟動點提供給Windows系統(tǒng)哪替。主執(zhí)行線程終止了栋荸,進程也就隨之終止。
線程狀態(tài)圖
每一個進程至少有一個主執(zhí)行線程凭舶,它無需由用戶去主動創(chuàng)建晌块,是由系統(tǒng)自動創(chuàng)建的。用戶根據(jù)需要在應(yīng)用程序中創(chuàng)建其它線程帅霜,多個線程并發(fā)地運行于同一個進程中匆背。一個進程中的所有線程都在該進程的虛擬地址空間中,共同使用這些虛擬地址空間身冀、全局變量和系統(tǒng)資源钝尸,所以線程間的通訊非常方便括享,多線程技術(shù)的應(yīng)用也較為廣泛。
多線程可以實現(xiàn)并行處理珍促,避免了某項任務(wù)長時間占用CPU時間铃辖。要說明的一點是,目前大多數(shù)的操作系統(tǒng)教材中的單處理器都是指的單核處理器踢星。對于單核單處理器(CPU)的澳叉,為了運行所有這些線程,操作系統(tǒng)為每個獨立線程安排一些CPU時間沐悦,操作系統(tǒng)以輪換方式向線程提供時間片成洗,這就給人一種假象,好象這些線程都在同時運行藏否。由此可見瓶殃,如果兩個非常活躍的線程為了搶奪對CPU的控制權(quán)副签,在線程切換時會消耗很多的CPU資源遥椿,反而會降低系統(tǒng)的性能。
最開始淆储,線程只是用于分配單個處理器的處理時間的一種工具冠场。但假如操作系統(tǒng)本身支持多個處理器,那么每個線程都可分配給一個不同的處理器本砰,真正進入“并行運算”狀態(tài)碴裙。從程序設(shè)計語言的角度看,多線程操作最有價值的特性之一就是程序員不必關(guān)心到底使用了多少個處理器点额,程序員只需將程序編寫成多線程模式即可舔株。程序在邏輯意義上被分割為數(shù)個線程;假如機器本身安裝了多個處理器还棱,那么程序會運行得更快载慈,毋需作出任何特殊的調(diào)校。根據(jù)前面的論述珍手,大家可能感覺線程處理非常簡單办铡。但必須注意一個問題:共享資源!如果有多個線程同時運行琳要,而且它們試圖訪問相同的資源料扰,就會遇到一個問題。舉個例子來說焙蹭,兩個線程不能將信息同時發(fā)送給一臺打印機晒杈。為解決這個問題,對那些可共享的資源來說(比如打印機)孔厉,它們在使用期間必須進入鎖定狀態(tài)拯钻。所以一個線程可將資源鎖定帖努,在完成了它的任務(wù)后,再解開(釋放)這個鎖粪般,使其他線程可以接著使用同樣的資源拼余。
線程是為了同步完成多項任務(wù),不是為了提高運行效率亩歹,而是為了提高資源使用效率來提高系統(tǒng)的效率匙监。線程是在同一時間需要完成多項任務(wù)的時候?qū)崿F(xiàn)的。
最簡單的比喻多線程就像火車的每一節(jié)車廂小作,而進程則是火車亭姥。車廂離開火車是無法跑動的,同理火車也不可能只有一節(jié)車廂顾稀。多線程的出現(xiàn)就是為了提高效率达罗。同時它的出現(xiàn)也帶來了一些問題。
注:單核處理器并不是一個長久以來存在的概念静秆,在近年來多核心處理器逐步普及之后粮揉,單核心的處理器為了與雙核和四核對應(yīng)而提出。顧名思義處理器只有一個邏輯核心抚笔。
多核處理器和多處理器的區(qū)別
多核是指一個CPU有多個核心處理器扶认,處理器之間通過CPU內(nèi)部總線進行通訊。而多CPU是指簡單的多個CPU工作在同一個系統(tǒng)上殊橙,多個CPU之間的通訊是通過主板上的總線進行的辐宾。從以上原理可知公罕,N個核的CPU浴麻,要比N個CPU在一起的工作效率要高(單核性能一致的情況下)。