線程的上下文切換


  利用時間片輪轉的方式,CPU給每個任務都服務一定的時間,然后把當前任務的狀態保存下來,在加載下一個任務后,繼續服務下一個任務,這個過程叫做上下文切換即對於單核CPU,CPU在一個時刻只能運行一個線程,當在運行一個線程的過程中轉去運行另外一個線程,這個叫做線程上下文切換(對於進程也是類似)。

  線程上下文切換過程中會記錄程序計數器、CPU寄存器的狀態等數據。

  雖然多線程可以使得任務執行的效率得到提升,但是由於在線程切換時同樣會帶來一定的開銷代價,並且多個線程會導致系統資源占用的增加,所以在進行多線程編程時要注意這些因素。

  時間片輪轉的方式使得多個任務在同一顆CPU上執行變成可能。

   

  1、進程(有時也稱為任務)是指一個程序運行的實例。在Linux系統中,線程就是能並行運行並且與它們父進程(創建它們的進程)共享同一地址空間(一段內存區域)和其他資源的輕量級的進程。

  2、上下文:指某一時間點CPU寄存器和程序計數器的內容。

  3、寄存器:是CPU內部的數量較少但是速度很快的內存(與之對應的是CPU外部相對較慢的RAM主內存)。寄存器通過對常用值(通常是運算的中間值)的快速訪問來提高計算機程序運行的速度。

  4、程序計數器:是一個專用的寄存器,用於表明指令序列中CPU正在執行的位置,存的值為正在執行的指令的位置或下一個將要被執行的指令的位置,具體依賴特定的系統。

  5、PCB-“切換楨”:上下文切換可以認為是內核(操作系統的核心)在CPU上對於進程(包括線程)進行切換,上下文切換過程中的信息是保存在進程控制塊中的。PCB還經常被稱作“切換楨”。信息會一直保存到CPU的內存中,直到它們被再次使用。

  6、上下文切換的活動

    1)掛起一個進程,將這個進程在CPU中的狀態(上下文)存儲於內存中的某處。

    2)在內存中檢索下一個進城的上下文並將其在CPU的寄存器中恢復。

    3)跳轉到程序計數器所指向的位置(即跳轉到進程被中斷時的代碼行),已恢復在程序中的該進程。

  7、引起線程上下文切換的原因

    1)當前執行任務的時間片用完之后,系統CPU正常調度下一個任務;

    2)當前執行任務碰到IO阻塞,調度器將此任務掛起,繼續下一任務;

    3)多個任務搶占鎖資源,當前任務沒有搶到鎖資源,被調度器掛起,繼續下一個任務;

    4)用戶代碼掛起當前任務,讓出CPU時間;

    5)硬件中斷;


免責聲明!

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



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