新聞中心
在現(xiàn)代操作系統(tǒng)中,調(diào)度是操作系統(tǒng)最重要的原則之一。它決定著進程如何被分配資源和執(zhí)行。然而,隨著系統(tǒng)的復(fù)雜程度不斷升級,調(diào)度的成本和開銷也在增加。Linux系統(tǒng)也不例外。本文將探究在Linux系統(tǒng)中調(diào)度引起的開銷,并提供一些優(yōu)化的建議。

站在用戶的角度思考問題,與客戶深入溝通,找到錫林郭勒盟網(wǎng)站設(shè)計與錫林郭勒盟網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站制作、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋錫林郭勒盟地區(qū)。
1. 調(diào)度的開銷
調(diào)度的開銷包括內(nèi)核態(tài)和用戶態(tài)兩部分。內(nèi)核態(tài)開銷是指在內(nèi)核中進行任務(wù)調(diào)度時產(chǎn)生的成本,例如上下文切換、進程間數(shù)據(jù)拷貝、進程調(diào)度隊列等。用戶態(tài)開銷是指從一個進程切換到另一個進程時發(fā)生的成本,例如CPU緩存失效、TLB緩存失效、頁表查找等。
由于調(diào)度涉及到多種開銷因素,因此在Linux系統(tǒng)中,調(diào)度開銷通常是相當(dāng)高的。通常情況下,內(nèi)核態(tài)開銷遠(yuǎn)高于用戶態(tài)開銷。在內(nèi)核中處理調(diào)度需要多次上下文切換,從而導(dǎo)致額外的開銷。
2. 如何優(yōu)化調(diào)度開銷
為了減少調(diào)度開銷,以下幾條建議可以被實踐:
2.1. 提高系統(tǒng)資源利用率
在Linux系統(tǒng)中,任務(wù)被調(diào)度時會占用CPU,而這會導(dǎo)致更高的開銷。通過提高系統(tǒng)資源利用率,例如利用輕量級進程、IO調(diào)度和負(fù)載平衡、多線程等,可以減少系統(tǒng)資源的浪費,從而降低開銷。
2.2. 緩存機制
在Linux系統(tǒng)中,緩存機制可以有效地減少調(diào)度引起的緩存失效。通過緩存在進程間傳遞的數(shù)據(jù),可以減少數(shù)據(jù)拷貝的開銷。而同時,可以避免產(chǎn)生過多的上下文切換,從而改進CPU緩存和TLB。
2.3. 調(diào)整進程調(diào)度策略
在Linux系統(tǒng)中,進程調(diào)度策略是可以被調(diào)整的,以實現(xiàn)更高效的調(diào)度。改變進程調(diào)度的時間片和優(yōu)先級,例如采用高優(yōu)先級的進程將被先執(zhí)行,這不僅可以減少開銷,而且還可以提高系統(tǒng)的性能。
2.4. 多處理器系統(tǒng)
Linux系統(tǒng)支持多處理器架構(gòu)的機器,因此通過多處理器能夠減少調(diào)度的開銷。雖然多處理器系統(tǒng)需要更多的內(nèi)存和CPU,但是它可以提供更好的可伸縮性,并且可以分發(fā)CPU負(fù)載,從而減少調(diào)度開銷。
3.
在Linux系統(tǒng)中,調(diào)度是非常重要的一環(huán)。調(diào)度開銷的高低與系統(tǒng)的優(yōu)化程度相關(guān),需要通過一系列手段進行優(yōu)化。雖然在優(yōu)化調(diào)度時,需要在多種開銷中尋找平衡點,但是通過上述方法,可以實現(xiàn)更優(yōu)秀的效果。培養(yǎng)高效的調(diào)度策略,將更好地貢獻(xiàn)于Linux系統(tǒng)和進程分配的穩(wěn)定性,提高系統(tǒng)的用途和用戶滿意度。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220Linux 進程調(diào)度
Linux的調(diào)度策略區(qū)分實時進程和普通進程,實時進程的調(diào)度策略是SCHED_FIFO和SCHED_RR,普通的,非實時進程的調(diào)度策略是SCHED_NORMAL(SCHED_OTHER)。
實時調(diào)度策略被實時調(diào)度器管理,普通調(diào)度策略被完全公平調(diào)度器來管理。實時進程的優(yōu)先級要高于普通進程(坦脊nice越小優(yōu)先級越高)。
SCHED_FIFO實現(xiàn)了一種簡單的先入先出的調(diào)度算法,它不使用時間片,但支持搶占,只有優(yōu)先級更高的SCHED_FIFO或者SCHED_RR進程才能搶占它,否則它會一直執(zhí)行下去,低優(yōu)先級的進程不能搶占它,直到它受阻塞或自己主動釋放處理器。
SCHED_RR是帶有時間片的一種實時輪流調(diào)度算法,當(dāng)SCHED_RR進程耗盡它的時間片時,同一優(yōu)先級的其它實時進程被輪流調(diào)度,時間片只用來重新調(diào)用同一優(yōu)先級的進程,低優(yōu)先級的進程決不能搶占SCHED_RR任務(wù),即使它的時間片耗盡。SCHED_RR是帶時間片的SCHED_FIFO。
Linux的實時調(diào)度算法提供了一種軟實時工作方式,軟實時的含義是盡力調(diào)度進程,盡力使進程在它的限定時間到來前運顫橘行,但內(nèi)核不保證總能滿足這些進程的要求,相反,硬實時系統(tǒng)保證在一定的條件下,可以滿足任何調(diào)度的要求。
SCHED_NORMAL使用完全公平調(diào)度算法(CFS),之前的算法直接將nice值對應(yīng)時間片的長度,而在CFS中,nice值只作為進程獲取處理器運行比的權(quán)重,每個進程都有一個權(quán)重,nice優(yōu)先級越高,權(quán)重越大,表示應(yīng)該運行更長的時間。Linux的實現(xiàn)中,每個進程都有一個vruntime字段,vruntime是經(jīng)過量化的進程運行時間,也就是實際運行時間除以權(quán)重,所以每個量化后的vruntime應(yīng)該相等,這就體現(xiàn)了公平性。
CFS當(dāng)然也支持搶占,但與實時調(diào)度算法不同,實時調(diào)度算法是根據(jù)優(yōu)先級進行搶占,CFS是根據(jù)vruntime進行搶占,vruntime小就擁有優(yōu)先被運行的權(quán)利。
為了計算時間片,CFS算法需要為完美多任務(wù)中的無限小調(diào)度周期設(shè)定近似值,這個近似值也稱作目標(biāo)延遲,指每個可運行進程在目標(biāo)延遲內(nèi)都會調(diào)度一次,如果進程數(shù)量太多,則時間粒度太小,所以約定時間片的默認(rèn)最小粒度是1ms。
進程可以分為I/O消耗型和處理器消耗型,這兩種進程的調(diào)度策略應(yīng)該不同,I/O消耗型應(yīng)該更加實時,給對端的感覺是響應(yīng)很快,同時它一般又不會消耗太多的讓洞滲處理器,因而I/O消耗型需要調(diào)度頻繁。相對來說,處理器消耗型不需要特別實時,應(yīng)該盡量降低它的調(diào)度頻度,延長其運行時間。
參考: linux內(nèi)核分析——CFS(完全公平調(diào)度算法) – 一路向北你好 – 博客園
Linux進程調(diào)度的概述
Linux的調(diào)度程序是一個叫Schedule()的函數(shù),由它來決定是否要進行進程的切換。而所謂的調(diào)度時機則是在什么情況下執(zhí)行調(diào)度程序。
Linux進程調(diào)度采用的是搶占式多任務(wù)處理,所以進程之間的掛悉孝胡起和繼續(xù)運行無需彼此之間的協(xié)作。
主要分為以下幾種情況:
1、進程狀態(tài)轉(zhuǎn)換的時刻:進程終止、進程睡眠
進程要調(diào)用sleep()或exit()等函數(shù)進行狀態(tài)轉(zhuǎn)換,這些函數(shù)會主動調(diào)用調(diào)度程序進行進程調(diào)度。
2、當(dāng)前進程的時間片用完時(current->counter=0)
由于進程的時間片是由時鐘中斷來更新的,因此,這種情況和時機4是一樣的。
3、設(shè)備驅(qū)動程序
當(dāng)設(shè)備驅(qū)動程序執(zhí)行長而重復(fù)的任務(wù)時,直接調(diào)用調(diào)度程序。在每次反復(fù)循環(huán)中,驅(qū)動程序都檢查need_resched的值,如果必要,則調(diào)用調(diào)度程序schedule()主動放棄CPU。
4、進程從中斷、異睜攔常及系統(tǒng)調(diào)用返回到用戶態(tài)時
不慎升管是從中斷、異常還是系統(tǒng)調(diào)用返回,最終都調(diào)用ret_from_sys_call(),由這個函數(shù)進行調(diào)度標(biāo)志的檢測,如果必要,則調(diào)用調(diào)度程序。
在Linux中,進程的運行時間不可能超過分配給他裂首芹們的時間片,他們采用的是搶占式多任務(wù)處理,所以進程之間的掛起和繼續(xù)運行無需彼此之間的協(xié)作。
在一個如linux這樣的多任務(wù)系統(tǒng)中,多個程序可能會競爭使用同一個資源,在這種情況下,我們認(rèn)為,執(zhí)行短期的突發(fā)性工作并暫停運行以等待輸入的程序,要比持續(xù)占用處芹清理器以進行計算或不斷輪詢系統(tǒng)以查看是否有輸入到達(dá)的程序要更好。我們稱表現(xiàn)好的程序為nice程序,而且在某種意義上,這個nice 是可以被計算出來的。操作系統(tǒng)根據(jù)進程的nice值來決定它的優(yōu)先級,一個進程的nice值默認(rèn)為0并將根據(jù)這個程序的表肆畢現(xiàn)不斷變化。長期不間斷運行的程序的優(yōu)先級一般會比較低。
一文讀懂Linux任務(wù)間調(diào)度原理和整個執(zhí)行過程
在前文中,我們分析禪檔了內(nèi)核中進程和線程的統(tǒng)一結(jié)構(gòu)體task_struct,并分析進程、線程的創(chuàng)建和派生的過程。在本文中,我們會對任務(wù)間調(diào)度進行詳細(xì)剖析,了解其原理和整個執(zhí)行過程。由此,進程、線程部分的大體框架就算是介紹完了。本節(jié)主要分為三個部分:Linux內(nèi)核中常見的調(diào)度策略,調(diào)度的基本結(jié)構(gòu)體以及調(diào)度發(fā)生的整個流程。下面將詳細(xì)展開說明。
Linux 作為一個多任務(wù)操作系統(tǒng),將每個 CPU 的時間劃分為很短的時間片,再通過調(diào)度器輪流分配給各個任務(wù)使用,因此造成多任務(wù)同時運行的錯覺。為了維護 CPU 時間,Linux 通過事先定義的節(jié)拍率(內(nèi)核中表示為 HZ),觸發(fā)時間中斷,并使用全局變量 Jiffies 記錄了開機以來的節(jié)拍數(shù)。每發(fā)生一次時間中斷,Jiffies 的值就加 1。節(jié)拍率 HZ 是內(nèi)核的可配選項,可以設(shè)置為 100、250、1000 等。不同的系統(tǒng)可能設(shè)置不同的數(shù)值,可以通過查詢 /boot/config 內(nèi)核選項來查看它的配置值。
Linux的調(diào)度策略主要分為實時任務(wù)和普通任務(wù)。實時任務(wù)需求盡快返回結(jié)果,而普通任務(wù)則沒有較高的要求。在前文中我們提到了task_struct中調(diào)度策略相應(yīng)的變量為policy,調(diào)度優(yōu)先級有prio, static_prio, normal_prio, rt_priority幾個。優(yōu)先級其實就是一個數(shù)值,對于實時進程來說,優(yōu)先級的范圍是 0 99;對于普通進程,優(yōu)先級的范圍是。數(shù)值越小,優(yōu)先級越高。
實時調(diào)度策答態(tài)略主要包括以下幾種
普通調(diào)度策略主要包括以下幾種:
首先,我們需要一個結(jié)構(gòu)體去執(zhí)行調(diào)度策略,即sched_class。該類有幾種實現(xiàn)方式
普通任務(wù)調(diào)度實體源碼如下,這里面包含了 vruntime 和權(quán)重 load_weight,以及對于運行時間的統(tǒng)計清襲源。
在調(diào)度時,多個任務(wù)調(diào)度實體會首先區(qū)分是實時任務(wù)還是普通任務(wù),然后通過以時間為順序的紅黑樹結(jié)構(gòu)組合起來,vruntime 最小的在樹的左側(cè),vruntime最多的在樹的右側(cè)。以CFS策略為例,則會選擇紅黑樹最左邊的葉子節(jié)點作為下一個將獲得 CPU 的任務(wù)。而這顆紅黑樹,我們稱之為運行時隊列(run queue),即struct rq。
其中包含結(jié)構(gòu)體cfs_rq,其定義如下,主要是CFS調(diào)度相關(guān)的結(jié)構(gòu)體,主要有權(quán)值相關(guān)變量、vruntime相關(guān)變量以及紅黑樹指針,其中結(jié)構(gòu)體rb_root_cached即為紅黑樹的節(jié)點
對結(jié)構(gòu)體dl_rq有類似的定義,運行隊列由紅黑樹結(jié)構(gòu)體構(gòu)成,并按照deadline策略進行管理
對于實施隊列相應(yīng)的rt_rq則有所不同,并沒有用紅黑樹實現(xiàn)。
下面再看看調(diào)度類sched_class,該類以函數(shù)指針的形式定義了諸多隊列操作,如
調(diào)度類分為下面幾種:
隊列操作中函數(shù)指針指向不同策略隊列的實際執(zhí)行函數(shù)函數(shù),在linux/kernel/sched/目錄下,fair.c、idle.c、rt.c等文件對不同類型的策略實現(xiàn)了不同的函數(shù),如fair.c中定義了
以選擇下一個任務(wù)為例,CFS對應(yīng)的是pick_next_task_fair,而rt_rq對應(yīng)的則是pick_next_task_rt,等等。
由此,我們來總結(jié)一下:
有了上述的基本策略和基本調(diào)度結(jié)構(gòu)體,我們可以形成大致的骨架,下面就是需要核心的調(diào)度流程將其拼湊成一個整體,實現(xiàn)調(diào)度系統(tǒng)。調(diào)度分為兩種,主動調(diào)度和搶占式調(diào)度。
說到調(diào)用,逃不過核心函數(shù)schedule()。其中sched_submit_work()函數(shù)完成當(dāng)前任務(wù)的收尾工作,以避免出現(xiàn)如死鎖或者IO中斷等情況。之后首先禁止搶占式調(diào)度的發(fā)生,然后調(diào)用__schedule()函數(shù)完成調(diào)度,之后重新打開搶占式調(diào)度,如果需要重新調(diào)度則會一直重復(fù)該過程,否則結(jié)束函數(shù)。
而__schedule()函數(shù)則是實際的核心調(diào)度函數(shù),該函數(shù)主要操作包括選取下一進程和進行上下文切換,而上下文切換又包括用戶態(tài)空間切換和內(nèi)核態(tài)的切換。具體的解釋可以參照英文源碼注釋以及中文對各個步驟的注釋。
其中核心函數(shù)是獲取下一個任務(wù)的pick_next_task()以及上下文切換的context_switch(),下面詳細(xì)展開剖析。首先看看pick_next_task(),該函數(shù)會根據(jù)調(diào)度策略分類,調(diào)用該類對應(yīng)的調(diào)度函數(shù)選擇下一個任務(wù)實體。根據(jù)前文分析我們知道,最終是在不同的紅黑樹上選擇最左節(jié)點作為下一個任務(wù)實體并返回。
下面來看看上下文切換。上下文切換主要干兩件事情,一是切換任務(wù)空間,也即虛擬內(nèi)存;二是切換寄存器和 CPU 上下文。關(guān)于任務(wù)空間的切換放在內(nèi)存部分的文章中詳細(xì)介紹,這里先按下不表,通過任務(wù)空間切換實際完成了用戶態(tài)的上下文切換工作。下面我們重點看一下內(nèi)核態(tài)切換,即寄存器和CPU上下文的切換。
switch_to()就是寄存器和棧的切換,它調(diào)用到了 __switch_to_a。這是一段匯編代碼,主要用于棧的切換, 其中32位使用esp作為棧頂指針,64位使用rsp,其他部分代碼一致。通過該段匯編代碼我們完成了棧頂指針的切換,并調(diào)用__switch_to完成最終TSS的切換。注意switch_to中其實是有三個變量,分別是prev, next, last,而實際在使用時,我們會對last也賦值為prev。這里的設(shè)計意圖需要結(jié)合一個例子來說明。假設(shè)有ABC三個任務(wù),從A調(diào)度到B,B到C,最后C回到A,我們假設(shè)僅保存prev和next,則流程如下
最終調(diào)用__switch_to()函數(shù)。該函數(shù)中涉及到一個結(jié)構(gòu)體TSS(Task State Segment),該結(jié)構(gòu)體存放了所有的寄存器。另外還有一個特殊的寄存器TR(Task Register)會指向TSS,我們通過更改TR的值,會觸發(fā)硬件保存CPU所有寄存器在當(dāng)前TSS,并從新的TSS讀取寄存器的值加載入CPU,從而完成一次硬中斷帶來的上下文切換工作。系統(tǒng)初始化的時候,會調(diào)用 cpu_init()給每一個 CPU 關(guān)聯(lián)一個 TSS,然后將 TR 指向這個 TSS,然后在操作系統(tǒng)的運行過程中,TR 就不切換了,永遠(yuǎn)指向這個 TSS。當(dāng)修改TR的值得時候,則為任務(wù)調(diào)度。
更多Linux內(nèi)核視頻教程文本資料免費領(lǐng)取后臺私信【
內(nèi)核大禮包
】自行獲取。
在完成了switch_to()的內(nèi)核態(tài)切換后,還有一個重要的函數(shù)finish_task_switch()負(fù)責(zé)善后清理工作。在前面介紹switch_to三個參數(shù)的時候我們已經(jīng)說明了使用last的重要性。而這里為何讓prev和last均賦值為prev,是因為prev在后面沒有需要用到,所以節(jié)省了一個指針空間來存儲last。
至此,我們完成了內(nèi)核態(tài)的切換工作,也完成了整個主動調(diào)度的過程。
搶占式調(diào)度通常發(fā)生在兩種情況下。一種是某任務(wù)執(zhí)行時間過長,另一種是當(dāng)某任務(wù)被喚醒的時候。首先看看任務(wù)執(zhí)行時間過長的情況。
該情況需要衡量一個任務(wù)的執(zhí)行時間長短,執(zhí)行時間過長則發(fā)起搶占。在計算機里面有一個時鐘,會過一段時間觸發(fā)一次時鐘中斷,通知操作系統(tǒng)時間又過去一個時鐘周期,通過這種方式可以查看是否是需要搶占的時間點。
時鐘中斷處理函數(shù)會調(diào)用scheduler_tick()。該函數(shù)首先取出當(dāng)前CPU,并由此獲取對應(yīng)的運行隊列rq和當(dāng)前任務(wù)curr。接著調(diào)用該任務(wù)的調(diào)度類sched_class對應(yīng)的task_tick()函數(shù)進行時間事件處理。
以普通任務(wù)隊列為例,對應(yīng)的調(diào)度類為fair_sched_class,對應(yīng)的時鐘處理函數(shù)為task_tick_fair(),該函數(shù)會獲取當(dāng)前的調(diào)度實體和運行隊列,并調(diào)用entity_tick()函數(shù)更新時間。
在entity_tick()中,首先會調(diào)用update_curr()更新當(dāng)前任務(wù)的vruntime,然后調(diào)用check_preempt_tick()檢測現(xiàn)在是否可以發(fā)起搶占。
check_preempt_tick() 先是調(diào)用 sched_slice() 函數(shù)計算出一個調(diào)度周期中該任務(wù)運行的實際時間 ideal_runtime。sum_exec_runtime 指任務(wù)總共執(zhí)行的實際時間,prev_sum_exec_runtime 指上次該進程被調(diào)度時已經(jīng)占用的實際時間,所以 sum_exec_runtime – prev_sum_exec_runtime 就是這次調(diào)度占用實際時間。如果這個時間大于 ideal_runtime,則應(yīng)該被搶占了。除了這個條件之外,還會通過 __pick_first_entity 取出紅黑樹中最小的進程。如果當(dāng)前進程的 vruntime 大于紅黑樹中最小的進程的 vruntime,且差值大于 ideal_runtime,也應(yīng)該被搶占了。
如果確認(rèn)需要被搶占,則會調(diào)用resched_curr()函數(shù),該函數(shù)會調(diào)用set_tsk_need_resched()標(biāo)記該任務(wù)為_TIF_NEED_RESCHED,即該任務(wù)應(yīng)該被搶占。
某些任務(wù)會因為中斷而喚醒,如當(dāng) I/O 到來的時候,I/O進程往往會被喚醒。在這種時候,如果被喚醒的任務(wù)優(yōu)先級高于 CPU 上的當(dāng)前任務(wù),就會觸發(fā)搶占。try_to_wake_up() 調(diào)用 ttwu_queue() 將這個喚醒的任務(wù)添加到隊列當(dāng)中。ttwu_queue() 再調(diào)用 ttwu_do_activate() 激活這個任務(wù)。ttwu_do_activate() 調(diào)用 ttwu_do_wakeup()。這里面調(diào)用了 check_preempt_curr() 檢查是否應(yīng)該發(fā)生搶占。如果應(yīng)該發(fā)生搶占,也不是直接踢走當(dāng)前進程,而是將當(dāng)前進程標(biāo)記為應(yīng)該被搶占。
由前面的分析,我們知道了不論是是當(dāng)前任務(wù)執(zhí)行時間過長還是新任務(wù)喚醒,我們均會對現(xiàn)在的任務(wù)標(biāo)記位_TIF_NEED_RESCUED,下面分析實際搶占的發(fā)生。真正的搶占還需要一個特定的時機讓正在運行中的進程有機會調(diào)用一下 __schedule()函數(shù),發(fā)起真正的調(diào)度。
實際上會調(diào)用__schedule()函數(shù)共有以下幾個時機
從系統(tǒng)調(diào)用返回用戶態(tài):以64位為例,系統(tǒng)調(diào)用的鏈路為do_syscall_64->syscall_return_slowpath->prepare_exit_to_usermode->exit_to_usermode_loop。在exit_to_usermode_loop中,會檢測是否為_TIF_NEED_RESCHED,如果是則調(diào)用__schedule()
內(nèi)核態(tài)啟動:內(nèi)核態(tài)的執(zhí)行中,被搶占的時機一般發(fā)生在 preempt_enable() 中。在內(nèi)核態(tài)的執(zhí)行中,有的操作是不能被中斷的,所以在進行這些操作之前,總是先調(diào)用 preempt_disable() 關(guān)閉搶占,當(dāng)再次打開的時候,就是一次內(nèi)核態(tài)代碼被搶占的機會。preempt_enable() 會調(diào)用 preempt_count_dec_and_test(),判斷 preempt_count 和 TIF_NEED_RESCHED 是否可以被搶占。如果可以,就調(diào)用 preempt_schedule->preempt_schedule_common->__schedule 進行調(diào)度。
?? 本文分析了任務(wù)調(diào)度的策略、結(jié)構(gòu)體以及整個調(diào)度流程,其中關(guān)于內(nèi)存上下文切換的部分尚未詳細(xì)敘述,留待內(nèi)存部分展開剖析。
1、調(diào)度相關(guān)結(jié)構(gòu)體及函數(shù)實現(xiàn)
2、schedule核心函數(shù)
關(guān)于linux 調(diào)度開銷的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應(yīng)用于計算機網(wǎng)絡(luò)、設(shè)計、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
文章題目:探究Linux系統(tǒng)中的調(diào)度開銷:如何優(yōu)化?(linux調(diào)度開銷)
瀏覽路徑:http://www.dlmjj.cn/article/dphdjhj.html


咨詢
建站咨詢
