線程共享的環境包括:
1.程序代碼段
2.程序的公有資料(利用這些共享的資料,線程很容易的實作互相之間的通訊)
3.程序打開的檔案描述符、信号的處理器、程序的目前目錄和程序使用者ID與程序組ID。
程序擁有這許多共性的同時,還擁有自己的個性。有了這些個性,線程才能實作并發性。這些個性包括:
1.線程ID
每個線程都有自己的線程ID,這個ID在本程序中是唯一的。程序用此來辨別線程。
2.寄存器組的值
由于線程間是并發運作的,每個線程有自己不同的運作線索,當從一個線程切換到另一個線程上 時,必須将原有的線程的寄存器集合的狀态儲存,以便
将來該線程在被重新切換到時能得以恢複。
3.線程的堆棧
堆棧是保證線程獨立運作所必須的。
線程函數可以調用函數,而被調用函數中又是可以層層嵌套的,是以線程必須擁有自己的函數堆棧, 使得函數調用可以正常執行,不受其他線程的影響。
4.錯誤傳回碼
由于同一個程序中有很多個線程在同時運作,可能某個線程進行系統調用後設定了errno值,而在該 線程還沒有處理這個錯誤,另外一個線程就在此時
被排程器投入運作,這樣錯誤值就有可能被修改。
是以,不同的線程應該擁有自己的錯誤傳回碼變量。
5.線程的信号屏蔽碼
由于每個線程所感興趣的信号不同,是以線程的信号屏蔽碼應該由線程自己管理。但所有的線程都 共享同樣的信号處理器。
6.線程的優先級
由于線程需要像程序那樣能夠被排程,那麼就必須要有可供排程使用的參數,這個參數就是線程的 優先級。
①程序是系統進行資源配置設定和排程的一個獨立機關。線程是程序的一個實體,是CPU排程和分派的基本機關。線程自己基本上不擁有系統資源,但是它可與同屬一個程序的其他的線程共享程序所擁有的全部資源。由于線程比程序更小,基本上不擁有系統資源,線程上下文切換比程序上下文切換要快得多,故對它的排程所付出的開銷就會小得多,進而顯著提高系統資源的使用率和吞吐量。
②一個程式至少有一個程序,一個程序至少有一個線程。程序在執行過程中擁有獨立的記憶體單元位址空間,而多個線程共享記憶體,進而極大地提高了程式的運作效率。
③程序間通信IPC需要特别的方法,線程間可以直接讀寫程序資料段(如全局變量)來進行通信。
程序排程開銷較大,建立多個程序也降低了系統的響應時間,WEB伺服器需要同時響應多個使用者的請求,故引入了線程,進一步提高系統的并發性。
每個線程有自己的堆棧和程式計數器為其執行上下文。