線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創建和撤銷另一個線程;
同一個進程中的多個線程之間可以并發執行.
進程在執行過程中擁有獨立的內存單元,而該進程的多個線程共享內存,從而極大地提高了程序的運行效率。
每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
在很多現代操作系統中,一個進程的(虛)地址空間大小為4G,分為系統(內核?)空間和用戶空間兩部分,系統空間為所有進程共享,而用戶空間是獨立的,一般WINDOWS進程的用戶空間為2G。
一個進程中的所有線程共享該進程的地址空間,但它們有各自獨立的(/私有的)棧(stack),Windows線程的缺省堆棧大小為1M。堆(heap)的分配與棧有所不同,一般是一個進程有一個C運行時堆,這個堆為本進程中所有線程共享,windows進程還有所謂進程默認堆,用戶也可以創建自己的堆。
用操作系統術語,線程切換的時候實際上切換的是一個可以稱之為線程控制塊的結構(TCB?),里面保存所有將來用于恢