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