策略模式應(yīng)用場景代碼舉例 linux進(jìn)程調(diào)度的三種策略是什么?
linux進(jìn)程調(diào)度的三種策略是什么?進(jìn)程調(diào)度策略應(yīng)該是調(diào)度系統(tǒng)種哪一個進(jìn)程來CPU不運(yùn)行。這種調(diào)度分2層考慮到。第一層,進(jìn)程狀態(tài)這個是最被優(yōu)先的,也就是說優(yōu)先級最高的。在linux中只有就緒態(tài)的進(jìn)程才
linux進(jìn)程調(diào)度的三種策略是什么?
進(jìn)程調(diào)度策略應(yīng)該是調(diào)度系統(tǒng)種哪一個進(jìn)程來CPU不運(yùn)行。
這種調(diào)度分2層考慮到。
第一層,進(jìn)程狀態(tài)這個是最被優(yōu)先的,也就是說優(yōu)先級最高的。
在linux中只有就緒態(tài)的進(jìn)程才有可能會被調(diào)度選中后再全部土地CPU,其它狀態(tài)的進(jìn)程不可能占有的到CPU。
下面是linux中進(jìn)程的狀態(tài)TASK_RUNNING:就位狀態(tài),能得到CPU就可以運(yùn)行。
TASK_INTERRUPTIBLE:淺層睡眠,資源合理到位或者造成信號都會轉(zhuǎn)成準(zhǔn)備完畢態(tài)。
TASK_UNINTERRUPTIBLE:淺度睡眠,資源到位就會進(jìn)入到準(zhǔn)備完畢態(tài),不服務(wù)控制器信號。
TASK_ZOMBIE:被凝固態(tài),進(jìn)程exit后。
TASK_STOPPED:恢復(fù)正常態(tài),發(fā)來SIG_CONT信號剛剛進(jìn)入就緒態(tài)。
第二層,反正真正在操作系統(tǒng)中的實現(xiàn),那就是所有準(zhǔn)備就緒態(tài)進(jìn)程鏈接成一個隊列,進(jìn)程調(diào)度時候只會決定這個隊列中的進(jìn)程,對其它的進(jìn)程不考慮到,這就利用了第一層中的要求。
這一次就是就位隊列內(nèi)部各個進(jìn)程的競爭了。
Linux常規(guī)3種有所不同的調(diào)度政策,SCHED_FIFO(下面縮寫成FIFO,先來先服務(wù)),SCHED_RR(簡寫成RR,時間片輪流),SCHED_OTHER(下面簡寫成OTHER)。
這里大家就能察覺出一個問題,按結(jié)構(gòu)相當(dāng)于調(diào)度政策的進(jìn)程之間也就有可比性,Linux3種調(diào)度政策并存,那么有所不同調(diào)度政策間的進(jìn)程如何都很呢?也算他們之間根本不會就沒有可比性。
當(dāng)然在調(diào)度時候,調(diào)度只看一個指標(biāo),那是各個進(jìn)程所更具的權(quán)值,權(quán)值最大的且在可執(zhí)行隊列中排在最前面的變會被調(diào)度負(fù)責(zé)執(zhí)行。
而權(quán)值的計算才會啊,設(shè)計到各方面因素,其中調(diào)度政策的確在計算權(quán)值中,份量是不比尋常的。
為什么Linux要這樣干呢?這是的原因事務(wù)的多樣性改變的,進(jìn)程有實時性進(jìn)程和非實時性的進(jìn)程2種,F(xiàn)IFO和RR是利用接受實時自動性進(jìn)程的調(diào)度,我們查查這3種政策下權(quán)值的計算公式就清楚了:FIFO和RR計算公式,權(quán)值1000進(jìn)正的運(yùn)行時間OTHER計算公式,當(dāng)時間片為0時,權(quán)值0.當(dāng)時間片不為0時候,權(quán)值剩余時間片20-yep,另外假如是內(nèi)核線程有1的小加分,這是畢竟內(nèi)核線程不必用戶空間的切換到,所以才給它加了一分,獎勵他在進(jìn)程切換到時候開銷小的功勞。
時間片好理解,這樣的話yeah這個值,用過linux系統(tǒng)的人都明白了,這是一個從unix下不能繼承過去的概念,來表示懂得謙讓度,是一個從20~-19的數(shù),可以不實際yeah和renice指令來設(shè)置。
從代碼中也能看見值越小就越不會歉讓他人。
從這里我們看得出FIFO和RR起碼有1000的基數(shù),所以在有FIFO和RR調(diào)度政策進(jìn)程修真者的存在時,OTHER進(jìn)程是沒有機(jī)會被調(diào)度指揮的到的。
從權(quán)值計算公式同時也能看出,F(xiàn)IFO先來先服務(wù)的調(diào)度政策柯西-黎曼方程了,但RR這個時間片分頭的調(diào)度如果沒有通過這種權(quán)值算出是肯定不能柯西-黎曼方程時間片分頭這一概念的。
這里只是權(quán)值的計算,在調(diào)度時候?qū)R政策的進(jìn)程特珠全面處理。
以上都是權(quán)值換算,下面看一下真正的的調(diào)度過程,是需要是對RR政策進(jìn)程的普通處理,假如當(dāng)前進(jìn)程區(qū)分的RR政策,這樣看他的時間片是否是只能用一次,用完了就踢到準(zhǔn)備完成隊列尾部,同時完全恢復(fù)他的時間片。
然后把是便利雷鳴就緒隊列,找到最后一個權(quán)值的最的進(jìn)程來運(yùn)行。
整體調(diào)度效果就是:要是有FIFO和RR政策的進(jìn)程,就優(yōu)先于指揮和調(diào)度他們2個,他們之間看已不能執(zhí)行時間長短做出決定勝負(fù),而2種政策內(nèi)部則尊守各自調(diào)度政策。
而OTHER唯有在前面2種不必然于準(zhǔn)備完成隊列時候才有可能先執(zhí)行,他們實際中也是分頭執(zhí)行,但他們之間是靠剩余時間和NICE值來改變勝負(fù)。
另外就緒隊列中排在最前面的最被優(yōu)先在同樣的權(quán)值情況下。
主鍵生成策略有哪些,舉例2-3個?
多主多寫的話,會。
1.多主單寫。性能冗余設(shè)計。
2.主鍵生成策略根據(jù)主數(shù)量取模。很簡單比較可靠,根本無法擴(kuò)展。
3.由應(yīng)用生成主鍵。不需要內(nèi)部改造業(yè)務(wù)代碼。
mesh。這個就必須架構(gòu)的改造了。