在linux中,執行緒(thread)指的是程式內部的執行路線,也就是一個行程內部的控制序列,一切行程至少都有一個執行緒。執行緒是程式執行的最小單位,執行緒共享進程數據,但也有自己的一部分數據。
本教學操作環境:linux5.9.8系統、Dell G3電腦。
Linux 執行緒的概念
什麼是執行緒?
- 在一個程式裡的一個執行路線就叫做執行緒(thread)。更準確的定義是:執行緒是「一個進程內部的控制序列」。
- 一切行程至少都有一個執行緒。
行程與執行緒
- #行程是資源分配與競爭的基本單位
-
-
- 行程是資源分配與競爭的基本單位
- 執行緒是程式執行的最小單位
- 執行緒共享進程數據,但也有自己的一部分數據
- 線程ID
- 一組暫存器:IP,PSW,堆疊指標
- 堆疊
errno
訊號狀態
## fork和創建新線程的區別-
-
- 當一個進程執行一個fork調用的時候,會創建一個進程的一個新拷貝,新進程將擁有它自己的變數和它自己的PID。這個新進程的運行時間是獨立的,它在執行時幾乎完全獨立於創建它的進程。
- 在進程裡面創建一個新線程的時候,新的執行進程會擁有自己的堆疊(因此也就有自己的局部變數),但要與他的創建者共享全域變數、檔案描述符、訊號處理器和目前工作目錄狀態。
-
- 執行緒的優點
-
#建立一個新執行緒的代價要比建立一個新行程小得多與進程之間的切換相比,執行緒之間的切換需要作業系統做的工作少得多
執行緒佔用的資源要比行程少很多
- 能充分利用多處理器的可並行數
- 在等待慢速I/O操作結束的同時,程式可執行其他的運算任務
- 計算密集型應用,為了能在多處理器系統上運行,將計算分解到多個執行緒中實現
- I/O密集型應用,為了提高系統,將I/O操作重疊。執行緒可以同時等待不同的I/O操作
-
- 執行緒的缺點
-
- ##效能損失
一個很少被外部事件阻塞的運算密集型執行緒往往無法與其他執行緒共用同一個處理器。如果計算密集型執行緒的數量比可用的處理器多,那麼可能會有較大的效能損失,這裡的效能損失指的是增加了額外的同步和調度開銷,而可用的資源不變。 健全性降低編寫多執行緒需要更全面更深入的考慮,在一個多執行緒程式裡,因時間分配上的細微偏差或因共享了不該共享的變數而造成不良的可能性是很大的,換句話說線程之間是缺乏保護的。
缺乏存取控制- 進程是存取控制的基本粒度,在一個執行緒中呼叫某些OS函數會對整個進程造成影響。
- 程式設計難度提高
- 編寫與調試一個多執行緒比單執行緒程式困難得多
執行緒調度競爭範圍### ############作業系統提供了各個模型,用來調度應用程式所建立的執行緒。這些模型時間的主要差異是:在競爭系統資源(特別是CPU時間)時,執行緒調度競爭範圍(thread-scheduling contention scope)不一樣######進程競爭範圍(Process contention scope):各個執行緒在同一個行程競爭「被調度的CPU時間」(但不直接和其他行程中的執行緒競爭)。 ######系統競爭範圍(System contention scope):執行緒直接和」系統範圍「內的其他執行緒競爭。 #########相關推薦:《###Linux影片教學###》###
以上是linux中什麼是線程的詳細內容。更多資訊請關注PHP中文網其他相關文章!