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