本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種基于隊(duì)列的線程調(diào)度方法及裝置。
背景技術(shù):
現(xiàn)在很多程序設(shè)計(jì)中,多線程的使用非常廣泛,一個(gè)常見的例子就是網(wǎng)絡(luò)服務(wù)器。當(dāng)有新的連接進(jìn)來(lái)的時(shí)候,網(wǎng)絡(luò)服務(wù)器就會(huì)創(chuàng)建一個(gè)線程去完成當(dāng)前連接的任務(wù),而網(wǎng)絡(luò)服務(wù)器繼續(xù)保持監(jiān)聽狀態(tài)。
但是隨著連接數(shù)量的增加,線程的頻繁調(diào)度引起的負(fù)載就超過(guò)了多線程處理帶來(lái)的好處,造成系統(tǒng)的性能下降。
因此,如何充分利用多線程的優(yōu)勢(shì),但是又避免線程頻繁的調(diào)度帶來(lái)的負(fù)載是本領(lǐng)域技術(shù)人員亟待解決的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種基于隊(duì)列的線程調(diào)度方法及裝置,用于充分利用多線程的優(yōu)勢(shì),但是又避免線程頻繁的調(diào)度帶來(lái)的負(fù)載。
為解決上述技術(shù)問題,本發(fā)明提供一種基于隊(duì)列的線程調(diào)度方法,包括:
檢測(cè)當(dāng)前系統(tǒng)中的線程拓?fù)浣Y(jié)構(gòu)的參數(shù),并按照檢測(cè)結(jié)果設(shè)置多個(gè)線程和存放待執(zhí)行任務(wù)的多個(gè)隊(duì)列;
當(dāng)有任務(wù)加入請(qǐng)求時(shí),按照預(yù)定規(guī)則將待執(zhí)行任務(wù)加入到所述隊(duì)列中時(shí),并調(diào)度對(duì)應(yīng)的線程以執(zhí)行所述待執(zhí)行任務(wù)。
優(yōu)選地,所述檢測(cè)當(dāng)前系統(tǒng)中的線程拓?fù)浣Y(jié)構(gòu)的參數(shù),并按照檢測(cè)結(jié)果設(shè)置多個(gè)線程和存放待執(zhí)行任務(wù)的多個(gè)隊(duì)列具體包括:
檢測(cè)所述線程拓?fù)浣Y(jié)構(gòu)中的邏輯核的數(shù)量,并按照所述邏輯核的數(shù)量設(shè)置相同數(shù)量的線程和相同數(shù)量的隊(duì)列。
優(yōu)選地,所述預(yù)定規(guī)則包括:
當(dāng)有所述待執(zhí)行任務(wù)時(shí),按照Round Robin算法把所述待執(zhí)行任務(wù)分配至所述隊(duì)列中。
優(yōu)選地,所述預(yù)定規(guī)則還包括:
當(dāng)同時(shí)有多個(gè)待執(zhí)行任務(wù)加入時(shí),按照待執(zhí)行任務(wù)的優(yōu)先級(jí)把所述待執(zhí)行任務(wù)分配至所述隊(duì)列中。
一種基于隊(duì)列的線程調(diào)度裝置,包括:
設(shè)置單元,用于檢測(cè)當(dāng)前系統(tǒng)中的線程拓?fù)浣Y(jié)構(gòu)的參數(shù),并按照檢測(cè)結(jié)果設(shè)置多個(gè)線程和存放待執(zhí)行任務(wù)的多個(gè)隊(duì)列;
執(zhí)行單元,用于當(dāng)有任務(wù)加入請(qǐng)求時(shí),按照預(yù)定規(guī)則將待執(zhí)行任務(wù)加入到所述隊(duì)列中時(shí),并調(diào)度對(duì)應(yīng)的線程以執(zhí)行所述待執(zhí)行任務(wù)。
優(yōu)選地,所述設(shè)置單元具體用于檢測(cè)所述線程拓?fù)浣Y(jié)構(gòu)中的邏輯核的數(shù)量,并按照所述邏輯核的數(shù)量設(shè)置相同數(shù)量的線程和相同數(shù)量的隊(duì)列。
優(yōu)選地,所述預(yù)定規(guī)則包括:
當(dāng)有所述待執(zhí)行任務(wù)時(shí),按照Round Robin算法把所述待執(zhí)行任務(wù)分配至所述隊(duì)列中。
優(yōu)選地,所述預(yù)定規(guī)則還包括:
當(dāng)同時(shí)有多個(gè)待執(zhí)行任務(wù)加入時(shí),按照待執(zhí)行任務(wù)的優(yōu)先級(jí)把所述待執(zhí)行任務(wù)分配至所述隊(duì)列中。
本發(fā)明所提供的基于隊(duì)列的線程調(diào)度方法及裝置,首先根據(jù)當(dāng)前系統(tǒng)中的線程拓?fù)浣Y(jié)構(gòu)的參數(shù)設(shè)置多個(gè)線程和存放待執(zhí)行任務(wù)的多個(gè)隊(duì)列,當(dāng)有任務(wù)加入請(qǐng)求時(shí),按照預(yù)定規(guī)則將待執(zhí)行任務(wù)加入到隊(duì)列中,并調(diào)度對(duì)應(yīng)的線程以執(zhí)行待執(zhí)行任務(wù)。由此可見,本方法無(wú)需太多線程,無(wú)需增加硬件資源,能夠顯著降低系統(tǒng)的負(fù)載,因此提高了系統(tǒng)的性能。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例,下面將對(duì)實(shí)施例中所需要使用的附圖做簡(jiǎn)單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明提供的一種基于隊(duì)列的線程調(diào)度方法的流程圖;
圖2為本發(fā)明提供的一種基于隊(duì)列的線程調(diào)度裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下,所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)范圍。
本發(fā)明的核心是提供一種基于隊(duì)列的線程調(diào)度方法及裝置。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。
圖1為本發(fā)明提供的一種基于隊(duì)列的線程調(diào)度方法的流程圖。如圖1所示,基于隊(duì)列的線程調(diào)度方法包括:
S10:檢測(cè)當(dāng)前系統(tǒng)中的線程拓?fù)浣Y(jié)構(gòu)的參數(shù),并按照檢測(cè)結(jié)果設(shè)置多個(gè)線程和存放待執(zhí)行任務(wù)的多個(gè)隊(duì)列。
在具體實(shí)施中,如果設(shè)置的線程太多,雖然能夠加快任務(wù)處理的速度,但是給系統(tǒng)的調(diào)度增加了太多的負(fù)載,嚴(yán)重時(shí)容易導(dǎo)致宕機(jī)??紤]到這一因素,本步驟中,首先檢測(cè)當(dāng)前系統(tǒng)中的線程拓?fù)浣Y(jié)構(gòu)的參數(shù),依據(jù)檢測(cè)結(jié)果設(shè)置多個(gè)線程和多個(gè)隊(duì)列。由于考慮到系統(tǒng)本身的線程拓?fù)浣Y(jié)構(gòu)才這是的線程數(shù)量和隊(duì)列數(shù)量,因此能夠降低過(guò)多線程給系統(tǒng)造成的調(diào)度壓力。
可以理解的是,線程拓?fù)浣Y(jié)構(gòu)的參數(shù)的選取可以有很多種,例如CPU數(shù)量、邏輯核數(shù)量等。作為優(yōu)選地實(shí)施方式,可以以邏輯核數(shù)量作為參數(shù)來(lái)選取,即檢測(cè)線程拓?fù)浣Y(jié)構(gòu)中的邏輯核的數(shù)量,并按照邏輯核的數(shù)量設(shè)置相同數(shù)量的線程和相同數(shù)量的隊(duì)列。因?yàn)榫€程數(shù)和系統(tǒng)邏輯核的數(shù)量一一對(duì)應(yīng),因此每個(gè)線程都會(huì)被盡量保證與CPU親和性(某個(gè)線程一直在某個(gè)CPU上運(yùn)行的能力),從而避免了線程調(diào)度和遷移。
S11:當(dāng)有任務(wù)加入請(qǐng)求時(shí),按照預(yù)定規(guī)則將待執(zhí)行任務(wù)加入到隊(duì)列中時(shí),并調(diào)度對(duì)應(yīng)的線程以執(zhí)行待執(zhí)行任務(wù)。
通過(guò)步驟S10設(shè)置好了線程和隊(duì)列,當(dāng)有待執(zhí)行任務(wù)時(shí),有可能當(dāng)前的線程無(wú)法同時(shí)處理完畢,因此,需要將待執(zhí)行任務(wù)按照預(yù)定規(guī)則分配到隊(duì)列中,最后按照隊(duì)列中的順序執(zhí)行即可。具體是隊(duì)列用于存放待執(zhí)行任務(wù)起到一個(gè)緩存的作用。當(dāng)某個(gè)隊(duì)列中的待執(zhí)行任務(wù)達(dá)到執(zhí)行時(shí)間時(shí),則調(diào)度對(duì)應(yīng)的線程執(zhí)行該任務(wù)即可。
本實(shí)施例提供的基于隊(duì)列的線程調(diào)度方法,首先根據(jù)當(dāng)前系統(tǒng)中的線程拓?fù)浣Y(jié)構(gòu)的參數(shù)設(shè)置多個(gè)線程和存放待執(zhí)行任務(wù)的多個(gè)隊(duì)列,當(dāng)有任務(wù)加入請(qǐng)求時(shí),按照預(yù)定規(guī)則將待執(zhí)行任務(wù)加入到隊(duì)列中,并調(diào)度對(duì)應(yīng)的線程以執(zhí)行待執(zhí)行任務(wù)。由此可見,本方法無(wú)需太多線程,無(wú)需增加硬件資源,能夠顯著降低系統(tǒng)的負(fù)載,因此提高了系統(tǒng)的性能。
在上述實(shí)施例的基礎(chǔ)上,預(yù)定規(guī)則包括:
當(dāng)有待執(zhí)行任務(wù)時(shí),按照Round Robin算法把待執(zhí)行任務(wù)分配至隊(duì)列中。
在具體實(shí)施中,當(dāng)有新的任務(wù)時(shí),需要將該任務(wù)分配至上述步驟設(shè)置的隊(duì)列中,這里采用的是Round Robin算法,可以理解的是,如何將待執(zhí)行任務(wù)分配到隊(duì)列中有多種方法可以按照時(shí)間的先后等進(jìn)行分配,并不是只有這一種分配方法。
在上述實(shí)施例的基礎(chǔ)上,預(yù)定規(guī)則還包括:
當(dāng)同時(shí)有多個(gè)待執(zhí)行任務(wù)加入時(shí),按照待執(zhí)行任務(wù)的優(yōu)先級(jí)把待執(zhí)行任務(wù)分配至隊(duì)列中。
如果同時(shí)又多個(gè)待執(zhí)行任務(wù)加入,則每個(gè)隊(duì)列中就會(huì)包含多個(gè)待處理的任務(wù),但是有的待執(zhí)行任務(wù)的優(yōu)先級(jí)較高,為了保證優(yōu)先級(jí)較高的待執(zhí)行任務(wù)盡早執(zhí)行,本實(shí)施例中,按照優(yōu)先級(jí)分配至隊(duì)列中,即優(yōu)先級(jí)高的待執(zhí)行任務(wù)排列在優(yōu)先級(jí)低的待執(zhí)行任務(wù)的前面。
圖2為本發(fā)明提供的一種基于隊(duì)列的線程調(diào)度裝置的結(jié)構(gòu)圖。如圖2所示,基于隊(duì)列的線程調(diào)度裝置包括:
設(shè)置單元10,用于檢測(cè)當(dāng)前系統(tǒng)中的線程拓?fù)浣Y(jié)構(gòu)的參數(shù),并按照檢測(cè)結(jié)果設(shè)置多個(gè)線程和存放待執(zhí)行任務(wù)的多個(gè)隊(duì)列。
在具體實(shí)施中,如果設(shè)置的線程太多,雖然能夠加快任務(wù)處理的速度,但是給系統(tǒng)的調(diào)度增加了太多的負(fù)載,嚴(yán)重時(shí)容易導(dǎo)致宕機(jī)??紤]到這一因素,本實(shí)施例中,首先設(shè)置單元10檢測(cè)當(dāng)前系統(tǒng)中的線程拓?fù)浣Y(jié)構(gòu)的參數(shù),依據(jù)檢測(cè)結(jié)果設(shè)置多個(gè)線程和多個(gè)隊(duì)列。由于考慮到系統(tǒng)本身的線程拓?fù)浣Y(jié)構(gòu)才這是的線程數(shù)量和隊(duì)列數(shù)量,因此能夠降低過(guò)多線程給系統(tǒng)造成的調(diào)度壓力。
可以理解的是,線程拓?fù)浣Y(jié)構(gòu)的參數(shù)的選取可以有很多種,例如CPU數(shù)量、邏輯核數(shù)量等。作為優(yōu)選地實(shí)施方式,可以以邏輯核數(shù)量作為參數(shù)來(lái)選取,即檢測(cè)線程拓?fù)浣Y(jié)構(gòu)中的邏輯核的數(shù)量,并按照邏輯核的數(shù)量設(shè)置相同數(shù)量的線程和相同數(shù)量的隊(duì)列。因?yàn)榫€程數(shù)和系統(tǒng)邏輯核的數(shù)量一一對(duì)應(yīng),因此每個(gè)線程都會(huì)被盡量保證與CPU親和性(某個(gè)線程一直在某個(gè)CPU上運(yùn)行的能力),從而避免了線程調(diào)度和遷移。
執(zhí)行單元11,用于當(dāng)有任務(wù)加入請(qǐng)求時(shí),按照預(yù)定規(guī)則將待執(zhí)行任務(wù)加入到隊(duì)列中時(shí),并調(diào)度對(duì)應(yīng)的線程以執(zhí)行待執(zhí)行任務(wù)。
設(shè)置單元10設(shè)置好了線程和隊(duì)列,當(dāng)有待執(zhí)行任務(wù)時(shí),有可能當(dāng)前的線程無(wú)法同時(shí)處理完畢,因此,需要將待執(zhí)行任務(wù)按照預(yù)定規(guī)則分配到隊(duì)列中,最后按照隊(duì)列中的順序執(zhí)行即可。具體是隊(duì)列用于存放待執(zhí)行任務(wù)起到一個(gè)緩存的作用。當(dāng)某個(gè)隊(duì)列中的待執(zhí)行任務(wù)達(dá)到執(zhí)行時(shí)間時(shí),則調(diào)度對(duì)應(yīng)的線程執(zhí)行該任務(wù)即可。
本實(shí)施例提供的基于隊(duì)列的線程調(diào)度裝置,首先根據(jù)當(dāng)前系統(tǒng)中的線程拓?fù)浣Y(jié)構(gòu)的參數(shù)設(shè)置多個(gè)線程和存放待執(zhí)行任務(wù)的多個(gè)隊(duì)列,當(dāng)有任務(wù)加入請(qǐng)求時(shí),按照預(yù)定規(guī)則將待執(zhí)行任務(wù)加入到隊(duì)列中,并調(diào)度對(duì)應(yīng)的線程以執(zhí)行待執(zhí)行任務(wù)。由此可見,本裝置無(wú)需太多線程,無(wú)需增加硬件資源,能夠顯著降低系統(tǒng)的負(fù)載,因此提高了系統(tǒng)的性能。
作為優(yōu)選地實(shí)施方式,設(shè)置單元10具體用于檢測(cè)線程拓?fù)浣Y(jié)構(gòu)中的邏輯核的數(shù)量,并按照邏輯核的數(shù)量設(shè)置相同數(shù)量的線程和相同數(shù)量的隊(duì)列。
作為優(yōu)選地實(shí)施方式,預(yù)定規(guī)則包括:當(dāng)有待執(zhí)行任務(wù)時(shí),按照Round Robin算法把待執(zhí)行任務(wù)分配至隊(duì)列中。
作為優(yōu)選地實(shí)施方式,預(yù)定規(guī)則還包括:當(dāng)同時(shí)有多個(gè)待執(zhí)行任務(wù)加入時(shí),按照待執(zhí)行任務(wù)的優(yōu)先級(jí)把待執(zhí)行任務(wù)分配至隊(duì)列中。
由于裝置部分的實(shí)施例與方法部分的實(shí)施例相互對(duì)應(yīng),因此裝置部分的實(shí)施例請(qǐng)參見方法部分的實(shí)施例的描述,這里暫不贅述。
以上對(duì)本發(fā)明所提供的基于隊(duì)列的線程調(diào)度方法及裝置進(jìn)行了詳細(xì)介紹。說(shuō)明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法部分說(shuō)明即可。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。
專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來(lái)實(shí)現(xiàn),為了清楚地說(shuō)明硬件和軟件的可互換性,在上述說(shuō)明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來(lái)實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。