進程與線程

進程與線程的理解:

(1)調度:
        在傳統的操作系統中,CPU調度和分派的基本單位是進程。而在引入線程的操作系統中,則把線程作爲CPU調度和分派的基本單位,進程則作爲資源擁有的基本單位,從而使傳統進程的兩個屬性分開,線程編程輕裝運行,這樣可以顯著地提高系統的併發性。同一進程中線程的切換不會引起進程切換,從而避免了昂貴的系統調用,但是在由一個進程中的線程切換到另一進程中的線程,依然會引起進程切換。
 
(2)併發性:
      在引入線程的操作系統中,不僅進程之間可以併發執行,而且在一個進程中的多個線程之間也可以併發執行,因而使操作系統具有更好的併發性,從而更有效地提高系統資源和系統的吞吐量。例如,在一個爲引入線程的單CPU操作系統中,若僅設置一個文件服務進程,當它由於某種原因被封鎖時,便沒有其他的文件服務進程來提供服務。在引入線程的操作系統中,可以在一個文件服務進程設置多個服務線程。當第一個線程等待時,文件服務進程中的第二個線程可以繼續運行;當第二個線程封鎖時,第三個線程可以繼續執行,從而顯著地提高了文件服務的質量以及系統的吞吐量。


(3)擁有資源:
      不論是引入了線程的操作系統,還是傳統的操作系統,進程都是擁有系統資源的一個獨立單位,他可以擁有自己的資源。一般地說,線程自己不能擁有資源(也有一點必不可少的資源),但它可以訪問其隸屬進程的資源,亦即一個進程的代碼段、數據段以及系統資源(如已打開的文件、I/O設備等),可供同一個進程的其他所有線程共享。


(4)獨立性:
        在同一進程中的不同線程之間的獨立性要比不同進程之間的獨立性低得多。這是因爲爲防止進程之間彼此干擾和破壞,每個進程都擁有一個獨立的地址空間和其它資源,除了共享全局變量外,不允許其它進程的訪問。但是同一進程中的不同線程往往是爲了提高併發性以及進行相互之間的合作而創建的,它們共享進程的內存地址空間和資源,如每個線程都可以訪問它們所屬進程地址空間中的所有地址,如一個線程的堆棧可以被其它線程讀、寫,甚至完全清除。

 

(5)系統開銷:

       由於在創建或撤銷進程時,系統都要爲之分配或回收資源,如內存空間、I/O設備等。因此,操作系統爲此所付出的開銷將顯著地大於在創建或撤消線程時的開銷。類似的,在進程切換時,涉及到整個當前進程CPU環境的保存環境的設置以及新被調度運行的CPU環境的設置,而線程切換隻需保存和設置少量的寄存器的內容,並不涉及存儲器管理方面的操作,可見,進程切換的開銷也遠大於線程切換的開銷。此外,由於同一進程中的多個線程具有相同的地址空間,致使他們之間的同步和通信的實現也變得比較容易。在有的系統中,現成的切換、同步、和通信都無需操作系統內核的干預。

 

(6)支持多處理機系統:
       在多處理機系統中,對於傳統的進程,即單線程進程,不管有多少處理機,該進程只能運行在一個處理機上。但對於多線程進程,就可以將一個進程中的多個線程分配到多個處理機上,使它們並行執行,這無疑將加速進程的完成。因此,現代處理機OS都無一例外地引入了多線程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章