進程上下文切換與和線程上下文切換有什麼不同?

1.首先,需要搞明白什麼是上下文切換?
上下文切換就是從當前執行任務切換到另一個任務執行的過程。但是,爲了確保下次能從正確的位置繼續執行,在切換之前,會保存上一個任務的狀態。

2. 然後,需要明白進程與線程的區別?(網上很多,這裏簡單說明)
1).線程是進程的一部分。進程是表示資源分配的基本單位,又是調度運行的基本單位,是程序執行的一個實例; 線程是進程中執行運算的最小單位,即執行處理機調度的基本單位,是進程中的一個執行流。
2).內存空間不同。每一個進程擁有自己獨立的內存空間,而線程共享進程的內存空間。

3. 所以,進程上下文切換與線程上下文切換最主要的區別就是線程的切換虛擬空間內存是相同的(因爲都是屬於自己的進程),但是,進程切換的虛擬空間內存則是不同的。

同時,這兩種上下文切換的處理都是通過操作系統內核來完成的。內核的這種切換過程伴隨的最顯著的性能損耗是將寄存器中的內容切換出。

線程上下文切換比進程上下文切換快的多。

補充:多線程是如何實現的?
主要是CPU通過給每個線程分配CPU時間片來實現多線程的。即使是單核處理器(CPU)也可以執行多線程處理。

時間片是CPU分配給各個線程的時間,因爲時間片非常短,所以CPU通過不停地切換線程執行,讓我們感覺多個線程時同時執行的,時間片一般是幾十毫秒(ms)。

4. 在進行上下文切換時,CPU通過時間片分配算法來循環執行任務,Java中的時間片分配算法有哪些?
最簡單最常用的就是基於時間片輪轉調度算法。時間片輪轉調度算法是非常公平的處理機分配方式,可以使就緒隊列的每個進程每次僅運行一個時間片。
原理:在時間片輪轉調度算法中,系統根據先來先服務的原則,將所有的就緒進程排成一個就緒隊列,並且每隔一段時間產生一次中斷,激活系統中的進程調度程序,完成一次處理機調度,把處理機分配給就緒隊列隊首進程,讓其執行指令。當時間片結束或進程執行結束,系統再次將CPU分配給隊首進程。
具體算法實現,點擊以下鏈接: 
https://blog.csdn.net/abc7845129630/article/details/52419167

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章