同一進程間的線程共享資源


線程共享的環境包括:

  1.進程代碼段 

  2.進程的公有數據(利用這些共享的數據,線程很容易的實現相互之間的通訊) 

  3.進程打開的文件描述符、信號的處理器、進程的當前目錄和進程用戶ID與進程組ID。

 

   進程擁有這許多共性的同時,還擁有自己的個性。有了這些個性,線程才能實現並發性。這些個性包括:

   1.線程ID
      每個線程都有自己的線程ID,這個ID在本進程中是唯一的。進程用此來標識線程。
 
   2.寄存器組的值
      由於線程間是並發運行的,每個線程有自己不同的運行線索,當從一個線程切換到另一個線程上 時,必須將原有的線程的寄存器集合的狀態保存,以便
   將來該線程在被重新切換到時能得以恢復。
 
   3.線程的堆棧
      堆棧是保證線程獨立運行所必須的。
   線程函數可以調用函數,而被調用函數中又是可以層層嵌套的,所以線程必須擁有自己的函數堆棧, 使得函數調用可以正常執行,不受其他線程的影響。

   4.錯誤返回碼
      由於同一個進程中有很多個線程在同時運行,可能某個線程進行系統調用后設置了errno值,而在該 線程還沒有處理這個錯誤,另外一個線程就在此時
   被調度器投入運行,這樣錯誤值就有可能被修改。
   所以,不同的線程應該擁有自己的錯誤返回碼變量。

   5.線程的信號屏蔽碼
      由於每個線程所感興趣的信號不同,所以線程的信號屏蔽碼應該由線程自己管理。但所有的線程都 共享同樣的信號處理器。

   6.線程的優先級
      由於線程需要像進程那樣能夠被調度,那么就必須要有可供調度使用的參數,這個參數就是線程的 優先級。

線程與進程的區別

①進程是系統進行資源分配和調度的一個獨立單位。線程是進程的一個實體,是CPU調度和分派的基本單位。線程自己基本上不擁有系統資源,但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。由於線程比進程更小,基本上不擁有系統資源,線程上下文切換比進程上下文切換要快得多,故對它的調度所付出的開銷就會小得多,從而顯著提高系統資源的利用率和吞吐量。
②一個程序至少有一個進程,一個進程至少有一個線程。進程在執行過程中擁有獨立的內存單元地址空間,而多個線程共享內存,從而極大地提高了程序的運行效率。
③進程間通信IPC需要特別的方法,線程間可以直接讀寫進程數據段(如全局變量)來進行通信。

進程調度開銷較大,創建多個進程也降低了系統的響應時間,WEB服務器需要同時響應多個用戶的請求,故引入了線程,進一步提高系統的並發性。

 

每個線程有自己的堆棧和程序計數器為其執行上下文。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM