從Linux的程序排程機制中想到的

2021-05-11 04:50:04 字數 444 閱讀 4293

linux

持續維護相關的資料結構(諸如

runqueue

、prio_array

),不斷更新程序的動態優先順序,並相應的調整時間片,從而實現了

o(1)

複雜度的程序排程演算法,可以在常量時間內排程新程序上台執行,而不受系統中程序總數的影響。

我覺得這至少能佐證三個道理: (

1)效益可以來自於平時點點滴滴地積累(功夫都在平時,而並非只針對

schedule()

函式本身做

「天才的設計」);

(2)維持秩序固然需要成本,卻可以帶來可觀的收益(如果不是一直維護著井然有序的佇列,程序排程演算法的複雜度恐怕很難優於

o(n));

(3)世上沒有免費的午餐(

o(1)

複雜度不是

0成本的),但不斷努力,不斷積累就可能吃到實惠的午餐。

linux程序排程機制

linux是以執行緒為單位進行cpu排程的。所以下面的描述中所說的執行緒和程序從cpu排程角度來說是等效。linux程序優先順序 priority。程序的優先順序是作業系統自己給定並且動態調整的。使用者可以通過nice值來調整實際優先順序。centos6.2 kernel 2.6.32 程序的預設優...

golang的goroutine排程機制

感覺豁然開朗,受益匪淺 去繁就簡,再加上自己的一些理解,整理了一下 排程器 主要基於三個基本物件上,g,m,p 定義在原始碼的src runtime runtime.h檔案中 1.g代表乙個goroutine物件,每次go呼叫的時候,都會建立乙個g物件 2.m代表乙個執行緒,每次建立乙個m的時候,都...

golang的goroutine排程機制

文章出處 主要基於三個基本物件上,g,m,p 定義在原始碼的src runtime runtime.h檔案中 1.g代表乙個goroutine物件,每次go呼叫的時候,都會建立乙個g物件 2.m代表乙個執行緒,每次建立乙個m的時候,都會有乙個底層執行緒建立 所有的g任務,最終還是在m上執行 3.p代...