轉自:https://www.cnblogs.com/poluner/articles/6604788.html,侵刪。
進程切換分兩步
1.切換頁目錄以使用新的地址空間。
2.切換內核棧和硬件上下文。
對於linux來說,線程和進程的最大區別就在於地址空間。
對於線程切換,第1步是不需要做的,第2是進程和線程切換都要做的。所以明顯是進程切換代價大
線程上下文切換和進程上下問切換一個最主要的區別是線程的切換虛擬內存空間依然是相同的,但是進程切換是不同的。這兩種上下文切換的處理都是通過操作系統內核來完成的。內核的這種切換過程伴隨的最顯著的性能損耗是將寄存器中的內容切換出。
另外一個隱藏的損耗是上下文的切換會擾亂處理器的緩存機制。簡單的說,一旦去切換上下文,處理器中所有已經緩存的內存地址一瞬間都作廢了。還有一個顯著的區別是當你改變虛擬內存空間的時候,處理的頁表緩沖(processor’s Translation Lookaside Buffer (TLB))或者相當的神馬東西會被全部刷新,這將導致內存的訪問在一段時間內相當的低效。但是在線程的切換中,不會出現這個問題。