線程是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。壹條線程指的是進程中壹個單壹順序的控制流,壹個進程中可以並發多個線程,每條線程並行執行不同的任務。
線程是獨立調度和分派的基本單位。線程可以為操作系統內核調度的內核線程,如Win32線程;由用戶進程自行調度的用戶線程,如Linux平臺的POSIX Thread;或者由內核與用戶進程,如Windows 7的線程,進行混合調度。
同壹進程中的多條線程將***享該進程中的全部系統資源,如虛擬地址空間,文件描述符和信號處理等等。但同壹進程中的多個線程有各自的調用棧(call stack),自己的寄存器環境(register context),自己的線程本地存儲(thread-local storage)。
壹個進程可以有很多線程,每條線程並行執行不同的任務。
線程特點
1、輕型實體
線程中的實體基本上不擁有系統資源,只是有壹點必不可少的、能保證獨立運行的資源。線程的實體包括程序、數據和TCB。線程是動態概念,它的動態特性由線程控制塊TCB(Thread Control Block)描述。
2、獨立調度和分派的基本單位
在多線程OS中,線程是能獨立運行的基本單位,因而也是獨立調度和分派的基本單位。由於線程很“輕”,故線程的切換非常迅速且開銷小(在同壹進程中的)。
3、可並發執行
在壹個進程中的多個線程之間,可以並發執行,甚至允許在壹個進程中所有線程都能並發執行;同樣,不同進程中的線程也能並發執行,充分利用和發揮了處理機與外圍設備並行工作的能力。
4、***享進程資源
在同壹進程中的各個線程,都可以***享該進程所擁有的資源,這首先表現在:所有線程都具有相同的地址空間(進程的地址空間),這意味著,線程可以訪問該地址空間的每壹個虛地址。
此外,還可以訪問進程所擁有的已打開文件、定時器、信號量機構等。由於同壹個進程內的線程***享內存和文件,所以線程之間互相通信不必調用內核。