一種線程優(yōu)化系統(tǒng)及方法
【專利摘要】本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種線程優(yōu)化系統(tǒng)及方法。本發(fā)明通過(guò)將當(dāng)前被調(diào)出的第一線程中浪費(fèi)的存儲(chǔ)空間減小,節(jié)省了第一線程占用的存儲(chǔ)空間,當(dāng)前被調(diào)入的第二線程存儲(chǔ)空間不足時(shí),增加第二線程的存儲(chǔ)空間,提高了線程的執(zhí)行效率,提高了存儲(chǔ)空間的利用率,避免了存儲(chǔ)空間的浪費(fèi)。
【專利說(shuō)明】
一種線程優(yōu)化系統(tǒng)及方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種線程優(yōu)化系統(tǒng)及方法。
【背景技術(shù)】
[0002] 現(xiàn)有技術(shù)中,為了執(zhí)行線程通常會(huì)為該線程預(yù)分配一定的存儲(chǔ)空間,現(xiàn)有的分配 方法是對(duì)所有的線程采用同一的分配標(biāo)準(zhǔn),并且線程的存儲(chǔ)空間的申請(qǐng)沒(méi)有被限制,有一 些線程由于函數(shù)的嵌套較多,會(huì)占用較大的存儲(chǔ)空間,但是有一些線程的存儲(chǔ)空間內(nèi)有大 量的未被使用的部分,這就會(huì)造成存儲(chǔ)空間的浪費(fèi),其他準(zhǔn)備執(zhí)行的線程由于存儲(chǔ)空間的 浪費(fèi)導(dǎo)致存儲(chǔ)空間的不足,使其執(zhí)行過(guò)程因存儲(chǔ)空間不足而被打斷。
【發(fā)明內(nèi)容】
[0003] 針對(duì)現(xiàn)有技術(shù)存在的問(wèn)題,現(xiàn)提供一種線程優(yōu)化系統(tǒng)及方法,能夠減小存儲(chǔ)空間 的浪費(fèi),提高存儲(chǔ)空間的利用率。
[0004] 具體的技術(shù)方案如下:
[0005] -種線程優(yōu)化系統(tǒng),應(yīng)用于嵌入式系統(tǒng)中,所述線程優(yōu)化系統(tǒng)包括:
[0006] 調(diào)度模塊3,用以于一處理器上調(diào)出當(dāng)前執(zhí)行的一第一線程,以及向所述處理器調(diào) 入需要執(zhí)行的一第二線程;
[0007] 判斷模塊1,與所述調(diào)度模塊3連接,用以判斷所述第一線程被調(diào)出后的實(shí)際占用 的存儲(chǔ)空間是否小于所述第一線程被分配的存儲(chǔ)空間,以及判斷所述第二線程被調(diào)入前的 被分配的存儲(chǔ)空間與所述第二線程被實(shí)際占用的存儲(chǔ)空間的差是否小于一第一值;
[0008] 調(diào)整模塊2,與所述判斷模塊1連接,用以于所述第一線程的所述實(shí)際占用的存儲(chǔ) 空間小于所述第一線程的所述被分配的存儲(chǔ)空間時(shí),減小所述第一線程的所述被分配的存 儲(chǔ)空間至一第二值,以及于所述第二線程的所述被分配的存儲(chǔ)空間與所述第二線程的所述 實(shí)際占用的存儲(chǔ)空間的差小于所述第一值時(shí)增大所述第二線程的所述被分配的存儲(chǔ)空間。
[0009] 優(yōu)選的,所述存儲(chǔ)空間為堆棧。
[0010] 優(yōu)選的,還包括
[0011] 回收模塊4,所述回收模塊4與所述調(diào)整模塊3連接,用以于所述調(diào)整模塊3減小所 述第一線程的所述被分配的存儲(chǔ)空間時(shí),回收所述第一線程的所述被分配的存儲(chǔ)空間被減 小的部分。
[0012] 優(yōu)選的,第二值大于等于所述第一線程被調(diào)出后的實(shí)際占用的存儲(chǔ)空間;或者
[0013] 所述第二值為4千字節(jié)。
[0014]優(yōu)選的,所述第一值為8千字節(jié)。
[0015] 一種線程優(yōu)化方法,包括:
[0016] 步驟S1,于一處理器上調(diào)出當(dāng)前執(zhí)行的一第一線程,以及向所述處理器調(diào)入需要 執(zhí)行的一第二線程;
[0017] 步驟S2,判斷所述第一線程被調(diào)出后的實(shí)際占用的存儲(chǔ)空間是否小于所述第一線 程被分配的存儲(chǔ)空間,以及判斷所述第二線程被調(diào)入前的被分配的存儲(chǔ)空間與所述第二線 程被實(shí)際占用的存儲(chǔ)空間的差是否小于一第一值;
[0018] 步驟S3,于所述第一線程的所述實(shí)際占用的存儲(chǔ)空間小于所述第一線程的所述被 分配的存儲(chǔ)空間時(shí),減小所述第一線程的所述被分配的存儲(chǔ)空間至一第二值,以及于所述 第二線程的所述被分配的存儲(chǔ)空間與所述第二線程的所述實(shí)際占用的存儲(chǔ)空間的差小于 所述第一值時(shí)增大所述第二線程的所述被分配的存儲(chǔ)空間。
[0019] 優(yōu)選的,所述存儲(chǔ)空間為堆棧。
[0020] 優(yōu)選的,所述步驟S3具體包括:
[0021 ]步驟S31,于減小所述第一線程的所述被分配的存儲(chǔ)空間時(shí),回收所述第一線程的 所述被分配的存儲(chǔ)空間被減小的部分。
[0022]優(yōu)選的,第二值大于等于所述第一線程被調(diào)出后的實(shí)際占用的存儲(chǔ)空間;或者 [0023]所述第二值為4千字節(jié)。
[0024]優(yōu)選的,所述第一線程的所述被分配的存儲(chǔ)空間與所述第二值的差值為8千字節(jié)。 [0025]上述技術(shù)方案的有益效果是:
[0026] 上述技術(shù)方案通過(guò)將當(dāng)前被調(diào)出的第一線程中浪費(fèi)的存儲(chǔ)空間減小,節(jié)省了第一 線程占用的存儲(chǔ)空間,當(dāng)前被調(diào)入的第二線程存儲(chǔ)空間不足時(shí),增加第二線程的存儲(chǔ)空間, 提高了線程的執(zhí)行效率,提高了存儲(chǔ)空間的利用率,避免了存儲(chǔ)空間的浪費(fèi)。
【附圖說(shuō)明】
[0027] 圖1-圖2為本發(fā)明一種線程優(yōu)化系統(tǒng)的實(shí)施例的結(jié)構(gòu)示意圖;
[0028] 圖3為本發(fā)明一種線程優(yōu)化方法的實(shí)施例的流程圖。
【具體實(shí)施方式】
[0029] 需要說(shuō)明的是,在不沖突的情況下,下述技術(shù)方案,技術(shù)特征之間可以相互組合。
[0030] 下面結(jié)合附圖對(duì)本發(fā)明的【具體實(shí)施方式】作進(jìn)一步的說(shuō)明:
[0031] 本實(shí)施例提供了一種線程優(yōu)化系統(tǒng),應(yīng)用于嵌入式系統(tǒng)中,如圖1所示,線程優(yōu)化 系統(tǒng)包括:
[0032] 調(diào)度模塊3,用以于一處理器上調(diào)出當(dāng)前執(zhí)行的一第一線程,以及向處理器調(diào)入需 要執(zhí)行的一第二線程;
[0033] 判斷模塊1,與調(diào)度模塊3連接,用以判斷第一線程被調(diào)出后的實(shí)際占用的存儲(chǔ)空 間是否小于第一線程被分配的存儲(chǔ)空間,以及判斷第二線程被調(diào)入前的被分配的存儲(chǔ)空間 與第二線程被實(shí)際占用的存儲(chǔ)空間的差是否小于一第一值;
[0034] 調(diào)整模塊2,與判斷模塊1連接,用以于第一線程的實(shí)際占用的存儲(chǔ)空間小于第一 線程的被分配的存儲(chǔ)空間時(shí),減小第一線程的被分配的存儲(chǔ)空間至一第二值,以及于第二 線程的被分配的存儲(chǔ)空間與第二線程的實(shí)際占用的存儲(chǔ)空間小于第一值時(shí)增大第二線程 的被分配的存儲(chǔ)空間。
[0035] 本實(shí)施例中每個(gè)線程可以有對(duì)應(yīng)的存儲(chǔ)空間,其中被調(diào)出的第一線程的實(shí)際占用 的存儲(chǔ)空間小于第一線程被分配的存儲(chǔ)空間時(shí),說(shuō)明第一線程的實(shí)際占用的存儲(chǔ)空間并未 占滿第一線程被分配的存儲(chǔ)空間,存在存儲(chǔ)空間浪費(fèi)現(xiàn)象,調(diào)度模塊2通過(guò)調(diào)整第一線程被 分配的存儲(chǔ)空間頭部或者尾部的指針將浪費(fèi)的存儲(chǔ)空間釋放。
[0036] 本實(shí)施例中,調(diào)度模塊3對(duì)被調(diào)入的第二線程進(jìn)行調(diào)度,使得第二線程的執(zhí)行時(shí)能 夠獲得足夠的存儲(chǔ)空間,避免第二進(jìn)程的執(zhí)行過(guò)程被打斷。
[0037] 本發(fā)明一個(gè)較佳的實(shí)施例中,存儲(chǔ)空間為堆棧。
[0038] 當(dāng)存儲(chǔ)空間為堆棧時(shí),判斷模塊1可通過(guò)調(diào)用棧空間調(diào)度函數(shù)檢查第一線程的棧 空間和第二線程的??臻g,以判斷第一線程被調(diào)出后的實(shí)際占用的??臻g是否小于第一線 程被分配的??臻g,以及第二線程被調(diào)入前的被分配的存儲(chǔ)空間與判斷第二線程的實(shí)際占 用的棧空間是否小于一第一值。
[0039] 本發(fā)明一個(gè)較佳的實(shí)施例中,如圖2所示,還包括
[0040] 回收模塊4,回收模塊4與調(diào)整模塊3連接,用以于調(diào)整模塊3減小第一線程的被分 配的存儲(chǔ)空間時(shí),回收第一線程的被分配的存儲(chǔ)空間被減小的部分。
[0041] 進(jìn)一步的,當(dāng)存儲(chǔ)空間為堆棧時(shí),回收模塊4通過(guò)調(diào)用?;厥蘸瘮?shù)回收第一線程的 被分配的??臻g被減小的部分。
[0042] 本發(fā)明一個(gè)較佳的實(shí)施例中,第二值大于等于第一線程被調(diào)出后的實(shí)際占用的存 儲(chǔ)空間。
[0043] 本發(fā)明一個(gè)較佳的實(shí)施例中,第二值為4千字節(jié)。
[0044]本發(fā)明一個(gè)較佳的實(shí)施例中,第一值為8千字節(jié)。
[0045]本實(shí)施例提供了一種線程優(yōu)化方法,如圖3所示,包括:
[0046] 步驟S1,于一處理器上調(diào)出當(dāng)前執(zhí)行的一第一線程,以及向處理器調(diào)入需要執(zhí)行 的一第二線程;
[0047] 步驟S2,判斷第一線程被調(diào)出后的實(shí)際占用的存儲(chǔ)空間是否小于第一線程被分配 的存儲(chǔ)空間,以及判斷第二線程被調(diào)入前的被分配的存儲(chǔ)空間與第二線程被實(shí)際占用的存 儲(chǔ)空間的差是否小于一第一值;
[0048] 步驟S3,于第一線程的實(shí)際占用的存儲(chǔ)空間小于第一線程的被分配的存儲(chǔ)空間 時(shí),減小第一線程的被分配的存儲(chǔ)空間至一第二值,以及于第二線程的被分配的存儲(chǔ)空間 與第二線程的實(shí)際占用的存儲(chǔ)空間的差小于第一值時(shí)增大第二線程的被分配的存儲(chǔ)空間。
[0049] 本發(fā)明一個(gè)較佳的實(shí)施例中,存儲(chǔ)空間為堆棧。例如,本實(shí)施例中的存儲(chǔ)空間可以 為??臻g。
[0050] 本發(fā)明一個(gè)較佳的實(shí)施例中,步驟S3具體包括:
[0051] 步驟S31,于減小第一線程的被分配的存儲(chǔ)空間時(shí),回收第一線程的被分配的存儲(chǔ) 空間被減小的部分。
[0052] 本發(fā)明一個(gè)較佳的實(shí)施例中,第二值大于等于第一線程被調(diào)出后的實(shí)際占用的存 儲(chǔ)空間。
[0053]本發(fā)明一個(gè)較佳的實(shí)施例中第二值為4千字節(jié)。
[0054] 本發(fā)明一個(gè)較佳的實(shí)施例中,第一值為8千字節(jié)。
[0055] 綜合上述實(shí)施例,現(xiàn)對(duì)上述實(shí)施例提供的線程優(yōu)化方法的偽代碼進(jìn)行舉例說(shuō)明: void stac:k_adjust(struct vm_area_struct *from_staGl</struct vm_area_struct *to_stack) { void *from_esp;
[0056] void *to_esp; void* tmp; i* * from^esp是第一線程當(dāng)前的棧指針,
[0057] from_stack->vm_start是第一線程??臻g的結(jié)束位置,這兩個(gè)指針之間的??臻g 空隙就是被浪費(fèi)的棧內(nèi)存,為了保證線程執(zhí)行切換的速度,可以預(yù)留4K的??臻g給每一個(gè) 線程,將其余的??臻g回收,這4K的棧空間即可以為第二值。
[0058] 本實(shí)施例中,增加??臻g的偽代碼為: .*/ for (tmp = from_esp; tmp > (from_stack->vm_start + 4KB); tmp
[0059] = 4KB) free(tmp);
[0060] 1* * t0_esf)是第二線程當(dāng)前的棧指針,to_stack->vm_start是 第二線程的??臻g的結(jié)束位置,to_stad<->vm_end是第二線程旗起始 位置。 * t〇_e_sp和t〇_stac:k->vm_start的棧空間空隙就是尚未植 使用的??臻g,為了保證線程有足夠的棧:空間,當(dāng)棧空間空隙小于8KB 的肘候:,可以給第二線程多分配一些棧空間,防止第二線程在執(zhí)行過(guò) 程中被頻繁打斷。 if (to_esp - to_stack->vm_start <= 8KB) { tmp = from_stack->vm_end; from stack->vm__end = realloc(16KB); memcpy(from_stack->vm_end, tmp, (to_esp -from_stack->end)); } }
[006i]本實(shí)施例中?;厥蘸瘮?shù)的偽代碼為: static void shrink cacbetetruct vm area struct ^vma stack} void *esp;
[0062] { * I <h-± voia nnip; i* * esp是第二進(jìn)程的棧指針,vma_stack->vm_start是第二 進(jìn)程棧空間的結(jié)束位置,這兩個(gè)指針之間的空隙就是被第一線程浪費(fèi) 的部分。 n for (遍歷系統(tǒng)中每一個(gè)進(jìn)程)
[0063] { for (tmp = esp; tmp > vma_stack->vm_start; tmp -= 4KB) { //釋放浪費(fèi)了的內(nèi)存頁(yè)。 free(tmp); } }
[0064]綜上,上述技術(shù)方案通過(guò)將當(dāng)前被調(diào)出的第一線程中浪費(fèi)的存儲(chǔ)空間減小,節(jié)省 了第一線程占用的存儲(chǔ)空間,當(dāng)前被調(diào)入的第二線程存儲(chǔ)空間不足時(shí),增加第二線程的存 儲(chǔ)空間,提高了線程的執(zhí)行效率,提高了存儲(chǔ)空間的利用率,避免了存儲(chǔ)空間的浪費(fèi)。
[0065]通過(guò)說(shuō)明和附圖,給出了【具體實(shí)施方式】的特定結(jié)構(gòu)的典型實(shí)施例,基于本發(fā)明精 神,還可作其他的轉(zhuǎn)換。盡管上述發(fā)明提出了現(xiàn)有的較佳實(shí)施例,然而,這些內(nèi)容并不作為 局限。
[0066] 對(duì)于本領(lǐng)域的技術(shù)人員而言,閱讀上述說(shuō)明后,各種變化和修正無(wú)疑將顯而易見(jiàn)。 因此,所附的權(quán)利要求書應(yīng)看作是涵蓋本發(fā)明的真實(shí)意圖和范圍的全部變化和修正。在權(quán) 利要求書范圍內(nèi)任何和所有等價(jià)的范圍與內(nèi)容,都應(yīng)認(rèn)為仍屬本發(fā)明的意圖和范圍內(nèi)。
【主權(quán)項(xiàng)】
1. 一種線程優(yōu)化系統(tǒng),其特征在于,應(yīng)用于嵌入式系統(tǒng)中,所述線程優(yōu)化系統(tǒng)包括: 調(diào)度模塊(3),用以于一處理器上調(diào)出當(dāng)前執(zhí)行的一第一線程,以及向所述處理器調(diào)入 需要執(zhí)行的一第二線程; 判斷模塊(1),與所述調(diào)度模塊(3)連接,用以判斷所述第一線程被調(diào)出后的實(shí)際占用 的存儲(chǔ)空間是否小于所述第一線程被分配的存儲(chǔ)空間,以及判斷所述第二線程被調(diào)入前的 被分配的存儲(chǔ)空間與所述第二線程被實(shí)際占用的存儲(chǔ)空間的差是否小于一第一值; 調(diào)整模塊(2),與所述判斷模塊(1)連接,用以于所述第一線程的所述實(shí)際占用的存儲(chǔ) 空間小于所述第一線程的所述被分配的存儲(chǔ)空間時(shí),減小所述第一線程的所述被分配的存 儲(chǔ)空間至一第二值,以及于所述第二線程的所述被分配的存儲(chǔ)空間與所述第二線程的所述 實(shí)際占用的存儲(chǔ)空間的差小于所述第一值時(shí)增大所述第二線程的所述被分配的存儲(chǔ)空間。2. 根據(jù)權(quán)利要求1所述的線程優(yōu)化系統(tǒng),其特征在于,所述存儲(chǔ)空間為堆棧。3. 根據(jù)權(quán)利要求1所述的線程優(yōu)化系統(tǒng),其特征在于,還包括 回收模塊(4),所述回收模塊(4)與所述調(diào)整模塊(3)連接,用以于所述調(diào)整模塊(3)減 小所述第一線程的所述被分配的存儲(chǔ)空間時(shí),回收所述第一線程的所述被分配的存儲(chǔ)空間 被減小的部分。4. 根據(jù)權(quán)利要求1所述的線程優(yōu)化系統(tǒng),其特征在于,第二值大于等于所述第一線程被 調(diào)出后的實(shí)際占用的存儲(chǔ)空間;或者 所述第二值為4千字節(jié)。5. 根據(jù)權(quán)利要求1所述的線程優(yōu)化系統(tǒng),其特征在于,所述第一值為8千字節(jié)。6. -種線程優(yōu)化方法,其特征在于,包括: 步驟Sl,于一處理器上調(diào)出當(dāng)前執(zhí)行的一第一線程,以及向所述處理器調(diào)入需要執(zhí)行 的一第二線程; 步驟S2,判斷所述第一線程被調(diào)出后的實(shí)際占用的存儲(chǔ)空間是否小于所述第一線程被 分配的存儲(chǔ)空間,以及判斷所述第二線程被調(diào)入前的被分配的存儲(chǔ)空間與所述第二線程被 實(shí)際占用的存儲(chǔ)空間的差是否小于一第一值; 步驟S3,于所述第一線程的所述實(shí)際占用的存儲(chǔ)空間小于所述第一線程的所述被分配 的存儲(chǔ)空間時(shí),減小所述第一線程的所述被分配的存儲(chǔ)空間至一第二值,以及于所述第二 線程的所述被分配的存儲(chǔ)空間與所述第二線程的所述實(shí)際占用的存儲(chǔ)空間的差小于所述 第一值時(shí)增大所述第二線程的所述被分配的存儲(chǔ)空間。7. 根據(jù)權(quán)利要求6所述的線程優(yōu)化方法,其特征在于,所述存儲(chǔ)空間為堆棧。8. 根據(jù)權(quán)利要求6所述的線程優(yōu)化方法,其特征在于,所述步驟S3具體包括: 步驟S31,于減小所述第一線程的所述被分配的存儲(chǔ)空間時(shí),回收所述第一線程的所述 被分配的存儲(chǔ)空間被減小的部分。9. 根據(jù)權(quán)利要求6所述的線程優(yōu)化方法,其特征在于,第二值大于等于所述第一線程被 調(diào)出后的實(shí)際占用的存儲(chǔ)空間;或者 所述第二值為4千字節(jié)。10. 根據(jù)權(quán)利要求6所述的線程優(yōu)化方法,其特征在于,所述第一值為8千字節(jié)。
【文檔編號(hào)】G06F9/50GK105930217SQ201610237415
【公開(kāi)日】2016年9月7日
【申請(qǐng)日】2016年4月15日
【發(fā)明人】黃金鈺
【申請(qǐng)人】上海斐訊數(shù)據(jù)通信技術(shù)有限公司