為什么切換線程比切換進程開銷小


首先要明白進程是什么:

  關於進程的定義有很多,一個經典的定義是一個執行中程序的實例,進程是程序的動態表現。  一個程序進行起來后,會使用很多資源,比如使用寄存器,內存,文件等。每當切換進程時,必須要考慮保存當前進程的狀態。狀態包括存放在內存中的程序的代碼和數據,它的棧、通用目的寄存器的內容、程序計數器、環境變量以及打開的文件描述符的集合,這個狀態叫做上下文(Context)。可見,想要切換進程,保存的狀態還不少。

其次就要了解線程是什么:

  線程存在於進程中,一個進程可以有一個或多個線程。線程是運行在進程上下文中的邏輯流,簡單說,線程可以理解為一個方法(Java)或函數(C),這個線程可以獨立完成一項任務。同樣線程有自己的上下文,包括唯一的整數線程ID, 棧、棧指針、程序計數器、通用目的寄存器和條件碼。可以理解為線程上下文是進程上下文的子集

 

由於保存線程的上下文明顯比進程的上下文小,因此系統切換線程時,必然開銷更小。

 

內容來自CSAPP chapter 8 & 12

  


免責聲明!

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



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