線程介紹 Intro 20世紀60年代人們提出了進程的概念,到20世紀80年代中期人們提出了比進程更小的能獨立運行的基本單位——線程,試圖用它來提高系統內程式併發執行的程度從而進一步提高系統的吞吐量。 線程具有傳統進程所具有的特征,所以稱之為輕型進程或進程元,相應的把傳統進程稱之為重型進程。 一個進 ...
線程介紹
Intro
20世紀60年代人們提出了進程的概念,到20世紀80年代中期人們提出了比進程更小的能獨立運行的基本單位——線程,試圖用它來提高系統內程式併發執行的程度從而進一步提高系統的吞吐量。
線程具有傳統進程所具有的特征,所以稱之為輕型進程或進程元,相應的把傳統進程稱之為重型進程。
一個進程可以擁有若幹個線程,至少一個。
線程的屬性
- 輕型實體
- 獨立調度和分派的基本單位
- 可併發執行
- 共用進程資源
進程與線程的比較
調度
進度是資源分配的基本單位,線程是調度和分派的基本單位,線程幾乎不擁有系統資源更輕量級,能顯著提高系統的併發程度。
在同一個進程中,線程的切換不會引起進程的切換。但從一個進程中的線程切換到另外一個進程中的線程時會引起進程的切換。
併發行
進程和線程都可以併發執行,這使得操作系統具有良好的併發性,從而能夠更加有效的提高系統資源的利用率和系統的吞吐量。引入線程使得系統具體更好的併發性
資源
進程是擁有資源的基本單位,線程幾乎不擁有系統資源,但是可以訪問它隸屬的進程的資源,進程的資源可以供該進程下的所有線程所共用
系統開銷
創建或撤銷進程時,系統都要為之創建和回收進程式控制制塊,分配和回收資源如記憶體空間和I/O設備等,操作系統所付出的開銷明顯大於線程創建或撤銷時的開銷。
進程的切換也會比線程的切換更費時,進程切換的代價比線程切換要高。
一個進程中的多個線程具有相同的地址空間,在同步和通信的實現方面也比進程容易。
線程間的同步
- 互斥鎖(mutex)
- 條件變數
- 信號量
- 私用信號量(同一進程內線程同步,進程內可見OS不知道,OS不會自動回收未釋放的信號量)
- 公用信號量(不同進程間線程同步,OS會自動回收未釋放的信號量,較安全)