Linux系統中 程序 、執行緒 、時間片的關係?知乎使用者2017-09-01 00:40:30

在Linux系統中,對於使用者建立的程序(執行緒)來說,CPU分配時間片的單位是執行緒還是程序?

是執行緒。執行緒是實際工作的單元

[1]

,程序只是一個容器,用來管理一個或多個執行緒。

1。這是不是就意味著儘量使用多執行緒併發,這樣可以搶到更多的時間片。

理論上是的,多執行緒的一種用途就是能同時做好幾件事情,以提高效率。但實際問題是,CPU的數量(核心數,下同)是有限的,而且並不多。如果你的CPU有8個CPU,並且整個系統中有8個執行緒的話,不考慮中斷等因素,每個執行緒理論上能一直執行下去。然而多於8個執行緒以後,作業系統就必須進行

排程

,也就是分配時間片。具體的分配方案,或者說排程演算法有很多種,詳情參見Scheduling (computing)。如果一個程序建立了很多執行緒的話,最多也只有8個能夠處於執行的狀態

[2]

,其餘的執行緒必須等待排程。執行緒被排程的時候需要進行上下文切換,這個操作是一種額外的開銷。執行緒數量過多的時候,上下文切換產生的額外開銷會對系統的效率造成負面影響。

2。作業系統對於擁有多執行緒的程序,是否會減少其每個執行緒的時間片,或做其他處理來保證公平性?

這就是排程演算法需要考慮和最佳化的問題。比如執行緒和程序有優先順序,在搶佔式的排程中,優先順序高的執行緒可以從優先順序低的執行緒那裡搶佔CPU。另外,在多CPU平臺上,排程演算法還要考慮快取的關聯性等。

在一個程序中的多個執行緒要注意在可能的情況下將本執行緒阻塞,將剩餘的時間片讓給兄弟執行緒。

在主流的作業系統實現裡,一般程序是不能直接控制自己的執行緒的執行順序的。也就是說,把一個執行緒掛起並不能保證另一個執行緒一定能夠被執行。

Linux系統中 程序 、執行緒 、時間片的關係?白彬2017-09-11 23:21:39

Linux不區分程序和執行緒,這難道不是Linux的常識內容嗎……

Linux系統中 程序 、執行緒 、時間片的關係?匿名使用者2017-09-26 00:06:05

if(CPU分配時間片的單位是執行緒):

1。這是不是就意味著儘量使用多執行緒併發,這樣可以搶到更多的時間片。

2。作業系統對於擁有多執行緒的程序,是否會減少其每個執行緒的時間片,

或做其他處理來保證公平性?

else:

1。這是不是表明我們應該合理分配執行緒。在一個程序中的多個執行緒要注

意在可能的情況下將本執行緒阻塞,將剩餘的時間片讓給兄弟執行緒。

2。程式儘量將任務交給多個子程序,以獲得更多的時間片來執行整個程式?

在我看來:

由於歷史原因,Linux核心層面,程序和執行緒的概念是混亂的,所以儘量不要去糾結概念。

與其糾結排程的到底是程序還是執行緒,不如轉而關注排程器的許可權和實現機制。

為此專門寫了一個文章,談談Linux和Windows作業系統下的排程。

袈裟披肩上:核心級排程和使用者級排程

Linux系統中 程序 、執行緒 、時間片的關係?zr scat2017-10-28 13:02:06

說幾點

1,在核心裡的排程單元是task,執行緒或者程序沒有分別

2,排程策略根據不同版本的核心不一樣,有搶佔式的,非搶佔式的,時間片由排程器根據當前task的狀態決定

3,高級別的任務會臨時打斷當前任務,比如中斷,timer,tasklet等

4,task主動出讓cpu也會引起排程,比如訊號量,鎖,sleep。

5,補充一點,程序和執行緒的主要區別在於map的空間不一樣,而不是排程。

Linux系統中 程序 、執行緒 、時間片的關係?Linf2021-11-09 19:27:51