來來來,線程基本概念瞭解一下~~~

線程的概念

那麼什麼是線程呢?
百度百科是這樣介紹的:

線程,有時被稱爲輕量級進程(Lightweight Process,LWP),是程序執行流的最小單元。一個標準的線程由線程ID,當前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創建和撤消另一個線程,同一進程中的多個線程之間可以併發執行。由於線程之間的相互制約,致使線程在運行中呈現出間斷性。線程也有就緒、阻塞和運行三種基本狀態。就緒狀態是指線程具備運行的所有條件,邏輯上可以運行,在等待處理機;運行狀態是指線程佔有處理機正在運行;阻塞狀態是指線程在等待一個事件(如某個信號量),邏輯上不可執行。每一個程序都至少有一個線程,若程序只有一個線程,那就是程序本身。


我們可以總結出來以下幾個要點:

  • 在一個程序裏的一個執行路線叫做一個線程(thread)。更準確的說,線程“是一個進程內部的控制序列”
  • 一切進程至少有一個執行線程

值得注意的是我們不要講進程與線程的概念混淆,線程和進程具體有一下幾點不同:

  • 進程是資源競爭的基本單位
  • 線程是程序執行的最小單位
  • 線程共享進程數據但也擁有自己的一部分必不可少的資源:
    1.線程ID 2.一組寄存器 3.棧 4.errno 5.信號屏蔽字 6.調度優先級

換句話說線程具有獨立的上下文私有的棧結構。

前面我們說多個線程可以共享進程的數據,具體有哪些呢?

  1. Text Segment 和 Data Segment都是共享的,如果定義一個函數在各線程中都可以調用。如果定義一個全局變量,在各線程中都可以訪問到。
  2. 文件描述符
  3. 信號的處理方式
  4. 當前工作目錄
  5. 用戶id和組id

至此,我們可以總結出線程的優缺點:
優點:

  • 創建一個新線程的代價要比創建一個新進程小的多
  • 與進程之間的切換相比,線程之間的切換操作系統的負擔小的多
  • 線程佔用的而資源少的多
  • 充分利用多處理器的可並行數量
  • 在等待慢速I/O操作時,程序可以執行其他的計算任務
  • 計算密集型應用,爲了能在多處理器系統上運行,將計算分解到多個線程中實現
  • I/O密集型應用,爲了提高性能,將I/O操作重疊。線程可以同時等待不同的I/O操作。

缺點:

  • 性能損失:如果計算密集型線程數量比可用處理器數量多,那麼可能會有較大的性能損失。這裏的性能損失指的是增加了額外的同步和調度開銷,而可用的資源不變。
  • 健壯性降低:線程是缺乏保護的。
  • 缺乏訪問控制:進程是訪問控制的基本粒度,在一個線程中調用某些OS函數會對整個進程造成影響。
  • 編程難度高

以上是關於線程的基本介紹,關於線程控制的問題可以參考我的博客:

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