Thread 的概念

基礎篇

C# 簡介

開發環境

變數與運算

流程控制

陣列

函數

物件

例外處理

函式庫篇

檔案處理

資料結構

正規表達式

Thread

應用篇

視窗程式

媒體影音

網路程式

遊戲程式

手機程式

資料庫

雲端運算

特殊功能

委派

擴展方法

序列化

LinQ

WPF

網路資源

教學影片

投影片

教學文章

軟體下載

考題解答

101習題

簡介

Thread 在台灣被稱為『執行緒』,但是在中國被稱為『線程』,這是近代作業系統中的一個重要概念,也是程式設計師所必須知道的進階概念之一,這個概念對想學習網路程式設計的人而言特別重要。

在現代的作業系統當中,如果我們將一個程式重複執行兩次,那麼這兩個程式將是毫不相關的。任何一個程式都不需要知道另一個程式是否存在,通常也不會與另一個程式進行溝通。現代的作業系統可以很容易的利用『多工』(Multitask) 機制,『同時』執行許多程式,並讓這些程式不會互相干擾,充分發揮整個電腦的 CPU 與記憶體效能,並協調程式對周邊設備的存取,讓整台電腦發揮最大的功效。

但是,如果我們希望兩個程式能夠互相分享某些變數,但是卻又同時執行,此時就可以利用 Thread 的機制。對於程式設計師而言,Thread 就像一個可以單獨執行的函數,這個函數與其他程式 (包含主程式) 同時執行,感覺上好像互相獨立,但是又可以利用變數存取某些共用變數。這種既獨立執行又能在變數上互相存取的函數,就稱為 Thread 函數。

作業系統中的 Thread

Thread 又稱做輕量級行程 (Light Weight Process),包含了一個程式計數器、一組暫存器和一個堆疊空間,但是又與其他 Thread 共用同一個位址空間,因此 Thread 之間可以互相存取變數。

傳統的行程 (Process) 可以看成是只有一個 Thread 的行程,行程與行程之間不能共用位址空間,也不能互相存取對方的變數。因此,Thread 對程式設計師而言比單獨的 Process 更好用。

對於剛開始接觸 Thread 的程式人員而言,會感覺到相當的詭異。因為『兩個 Thread 同時執行』是一個相當難以理解的概念。事實上,由於 CPU 通常只有一個,所以並非兩個程式真的會『同時』執行,只是『交錯』執行而已。但是這個交錯方式是由作業系統決定的,而非由程式設計師自行安排。通常,程式人員對於這種不能由自己操控決定的情況會有不安的感覺,但是當您多寫幾個程式之後,這種疑慮就會消除了,畢竟,程式人員本來就相當依賴作業系統,只是自己通常感覺不到而已。

若想要看看 Thread 在作業系統當中的地位,請看下列的投影片。

  1. 作業系統與 Thread (ppt at scribd)
  2. 行程管理簡介 (ppt at scribd)
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License