專利名稱:流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及流媒體技術(shù),尤其涉及一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法及裝置。
背景技術(shù):
流媒體(streaming media)又稱為流式媒體,流媒體技術(shù)是一種使音頻、視頻和其它多媒體元素在因特網(wǎng)(Internet)及無線網(wǎng)絡上以實時的、無需下載等待的方式進行播放的技術(shù)。由于流媒體技術(shù)的優(yōu)越性,該技術(shù)廣泛應用于視頻點播、視頻會議、遠程教育、遠程醫(yī)療、在線直播系統(tǒng)、以及互動電視系統(tǒng)等。作為新一代互聯(lián)網(wǎng)應用的標志,流媒體技術(shù)在近幾年得到了飛速發(fā)展。流媒體服務器是流媒體技術(shù)應用的核心系統(tǒng),是運營商向用戶提供視頻服務的關(guān)鍵平臺。而限制流媒體服務系統(tǒng)的性能,特別是讀取數(shù)據(jù)進行服務的速度和質(zhì)量的主要因素包括1)硬盤技術(shù)帶來的網(wǎng)絡存儲瓶頸;2)流媒體點播技術(shù)瓶頸;3)互聯(lián)網(wǎng)帶寬瓶頸。目前,市場上主流7200轉(zhuǎn)硬盤的讀取速度為150MB/S左右,磁盤陣列的IO吞吐量一般為400MB/S左右。與以前的硬盤技術(shù)相比,目前的硬盤技術(shù)雖然有了很大提高,但相比較計算機其它方面的性能提高和數(shù)字信息量的增長速度,硬盤技術(shù)仍相對落后。硬盤技術(shù)的緩慢發(fā)展,限制了網(wǎng)絡存儲能力,它成為影響流媒體服務速度的主要因素之一。根據(jù)硬盤特定的盤片結(jié)構(gòu),增大每次讀寫的數(shù)據(jù)量可提高硬盤訪問效率。為了提高流媒體服務系統(tǒng)的性能,在與存儲相關(guān)的系統(tǒng)和實現(xiàn)方面,多數(shù)技術(shù)方案均是以多個磁盤構(gòu)成RAID組通過磁盤陣列來獲得高的吞吐能力,即獲得高的硬盤讀寫效率,這樣,會帶來高的運營成本。從用戶角度來看,在播放流媒體時,大多數(shù)情況下,用戶的習慣是按順序觀看,SP使有跳躍觀看操作,在短時間內(nèi),多數(shù)也是按順序播放的。根據(jù)計算機存儲的分級結(jié)構(gòu)、磁盤適合大數(shù)據(jù)量順序讀寫的特點、以及用戶大部分時間內(nèi)進行連續(xù)播放的習慣,針對硬盤整體讀取速度偏低和訪問效率不高的現(xiàn)狀,提出了一種知情式文件預讀取方法,可應用于網(wǎng)絡流媒體等服務,能提高硬盤讀取效率,從而增加這些應用的服務能力。這里,知情式文件預讀方法是指按照媒體文件存儲的順序選擇預讀的內(nèi)容,系統(tǒng)把將來可能用到的數(shù)據(jù)預先讀取到緩存中。基于此預讀取方法,可以在流媒體應用程序里預設緩存,每次讀取大量連續(xù)的數(shù)據(jù),從而提高硬盤訪問效率,而且與用戶播放流媒體的習慣相符合。當預設緩存的數(shù)據(jù)用完后,需要從硬盤中讀取下一部分數(shù)據(jù),此時,存在延時,為解決延時帶來的影響,知情式預讀取方法往往采用雙緩存技術(shù)。這里,所述雙緩存技術(shù)是指采用兩個動態(tài)申請的且大小相同的緩存空間。兩個緩存輪流為用戶提供服務。雙緩存結(jié)構(gòu)中會記錄緩存總大小、剩余數(shù)據(jù)量、當前服務的單緩存、兩個單緩存起始地址、以及下次發(fā)送數(shù)據(jù)的地址大小等信息。雙緩存技術(shù)的一個關(guān)鍵點是何時填充緩存。目前常用的方法包括(I)隨機填充式策略主要思想是當雙緩存切換后,不是立即填充空緩存,而隨機選擇一個填充時間,并保證在下次雙緩存切換之前完成。這種策略最大的特點是隨機化,宏觀來看,可以做到使讀磁盤操作平均分布于時間軸之上。圖I為雙緩存的動作時間軸示意圖,如圖I所示,時間點T1表示開始使用該緩存的時間,時間點T2表示填充另一個空緩存的時間,時間點T3表示為空緩存預留的安全時間,時間點T4表示當前緩存數(shù)據(jù)用完并切換至另一緩存的時間,同時也是另一緩存開始使用的時間;其中,時間點T3存在的目的是防止由于系統(tǒng)忙碌、或時間點T2離時間點T4太近,而導致在時間點T4到來之前還沒有完成空緩存的填充。切換動作就是指將會話結(jié) 點中緩存結(jié)構(gòu)的發(fā)送指針指向另一緩存,并更新相關(guān)的統(tǒng)計數(shù)據(jù)??站彺娴碾S機化填充在時間ATjPT3之間進行。具體實現(xiàn)是首先計算時間點T3至時間點T1的時間間隔所經(jīng)歷的定時器中斷次數(shù)INTR_NUM ;然后,在時間點T4進行緩存切換時,為每個用戶會話的新空緩存生成隨機魔數(shù)m,且0 < m < INTR_NUM ;每當定時器超時時,都在中斷處理函數(shù)中將m減1,如果m等于0,則進行空緩存的填充,即構(gòu)造消息傳遞至讀(read)消息隊列,由read線程池執(zhí)行具體的讀磁盤操作。其中,為每個用戶會話的新空緩存生成隨機魔數(shù)m的目的是避免所有的用戶會話同時填充空緩存,從而避免了磁盤的大量并發(fā)讀操作所帶來的負荷,實現(xiàn)了磁盤I/O的負載均衡。(2)狀態(tài)檢測式策略雖然隨機填充式策略從宏觀上實現(xiàn)了磁盤I/O的負載均衡,但該策略忽略了切換時磁盤I/o和CPU的狀態(tài),因此可能會錯失開始的最佳填充時機。因此,狀態(tài)檢測式策略的主要思想是在雙緩存切換后,首先立即判斷磁盤I/o傳輸速率和CPU占用率,如果都在較低的范圍內(nèi),就立即進行空緩存填充;否則,就按隨機填充式策略處理。(3)指數(shù)后退式策略隨機填充式策略和狀態(tài)檢測式策略這兩種空緩存填充策略,都應用了隨機化填充的方法,但是,這兩種填充策略可能會存在潛在的問題如果在隨機選擇的填充時間點,磁盤傳輸速率和CPU占用率比較高,填充操作仍會增加系統(tǒng)的負擔。因此,指數(shù)后退式策略的主要思想是在每次空緩存填充時,首先判斷當前的磁盤傳輸速率和CPU占用率,如果都在較低的范圍之內(nèi),就立即進行讀磁盤填充空緩存操作;如果磁盤傳輸速率或CPU占用率很高,說明系統(tǒng)忙碌,此時以指數(shù)時間向后退避,在退避的時間段內(nèi)選擇一個隨機填充時間。當新的填充時間到來時,重復上述判斷步驟,直到到達安全時間點,不管系統(tǒng)是否忙碌,立刻進行讀磁盤填充操作。指數(shù)后退式策略改進了隨機填充式策略和狀態(tài)檢測式策略,使得空緩存填充時間點選擇的更加合理,可以更好地和均衡地利用磁盤的I/O吞吐量和CPU的能力。但該策略也存在一定缺點獲取磁盤傳輸速率和CPU占用率的次數(shù)眾多,如果獲取這些信息花費的時間較長,則有可能會過多地占用服務用戶的時間。以上三個策略中,在每個時間中斷,對每個服務都要檢測是否到了填充時機,如果未到填充時機,則隨機魔數(shù)m減1,如果到了填充時機,則判定是否填充。每個服務都要保存隨機魔數(shù)信息并改變,且要判斷是否進行填充,這增加了系統(tǒng)開銷。另外,以上三個策略都沒有根據(jù)任務的緊急性進行優(yōu)先級排名。舉個例子來說,月艮務A已經(jīng)到了安全填充時間,服務B剛進行緩存切換,而此時磁盤I/O傳輸速率和CPU占用率都比較低,因此,兩者都能執(zhí)行填充。顯然,由于服務A已經(jīng)到了安全填充時間,所以應該優(yōu)先對服務A進行緩存填充,但現(xiàn)有的策略中,服務A無法優(yōu)先進行緩沖填充。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法及裝置,能有效地減少獲取磁盤I/o傳輸速率和CPU占用率信息的次數(shù)。為達到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的本發(fā)明提供了一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法,該方法包括設置N個消息執(zhí)行隊列;
緩存切換后,消息管理模塊將收到的緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,同時,read線程池管理模塊依據(jù)各消息執(zhí)行對列對應的填充安全時長,調(diào)用read線程依次從對各消息執(zhí)行對列中讀取消息并進行填充處理; 中斷時間到后,消息管理模塊鎖定所有消息執(zhí)行隊列,之后對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,執(zhí)行完畢后對所有消息執(zhí)行隊列解鎖并通知read線程池管理模塊;read線程池管理模塊依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用read線程依次從當前各消息執(zhí)行隊列中讀取消息并進行填充處理。上述方案中,所述設置N個消息執(zhí)行隊列,為依據(jù)設定的緩存的最大服務時間及中斷時長,設置N個消息執(zhí)行隊列。上述方案中,該方法還包括緩存切換后,處理前端向消息管理模塊發(fā)送緩存填充消息。上述方案中,所述消息管理模塊將收到的緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,包括依據(jù)收到的各緩存填充消息對應的填充安全時長,將各緩存填充消息分發(fā)至對應的消息執(zhí)行隊列。上述方案中,在設置N個消息執(zhí)行隊列時,該方法進一步包括依據(jù)中斷次數(shù),依次為每個消息執(zhí)行對列進行編號;相應的,如果首消息執(zhí)行隊列中有未處理的緩存填充消息,所述對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,包括將首消息執(zhí)行隊列中未處理的緩存填充消息移入第二個消息執(zhí)行隊列的隊首,并修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前編號減一。上述方案中,如果首消息執(zhí)行隊列中沒有未處理的緩存填充消息,所述對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,包括修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前
編號減一。上述方案中,所述依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用read線程依次從當前各消息執(zhí)行隊列中讀取消息并進行填充處理,包括如果進行重分配處理后的首消息執(zhí)行隊列及第二個消息執(zhí)行對列中有未處理的緩存填充消息,則read線程池管理模塊調(diào)用read線程依次讀取首消息執(zhí)行隊列及第二個消息執(zhí)行對列中的緩存填 充消息,并進行填充處理,直至首消息執(zhí)行隊列及第二個消息執(zhí)行對列中的緩存填充消息處理完,如果沒有,則根據(jù)當前磁盤I/o和CPU的占用率信息,判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第三個消息執(zhí)行對列中的緩存填充消息,并進行填充處理,第三個消息執(zhí)行對列中的緩存填充消息處理完成后,進一步判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第四個消息執(zhí)行對列中的緩存填充消息,并進行填充處理,以此類推。本發(fā)明又提供了一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法,該方法包括設置I個消息初始隊列及N個消息執(zhí)行隊列;中斷時間到后,消息管理模塊鎖定所述消息初始隊列,通知read線程池管理模塊暫停讀取消息,將所述消息初始隊列中的所有緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,分發(fā)完畢后解鎖所述消息初始隊列,之后對消息執(zhí)行隊列中的消息進行重分配處理,處理完畢后通知read線程池管理模塊;read線程池管理模塊依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/o和CPU的占用率信息,調(diào)用read線程依次從各消息執(zhí)行隊列中讀取消息并進行填充處理。上述方案中,該方法還包括緩存切換后,處理前端添加緩存填充消息至所述消息初始隊列。上述方案中,所述將所述消息初始隊列中的所有緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,包括依據(jù)各緩存填充消息的填充安全時長,將各緩存填充消息分發(fā)至對應的消息執(zhí)行隊列。14、根據(jù)權(quán)利要求11所述的方法,所述依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用read線程依次從當前各消息執(zhí)行隊列中讀取消息并進行填充處理,包括本發(fā)明還提供了一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的裝置,該裝置包括第一消息管理模塊、第一 read線程池管理模塊、以及第一 read線程模塊;其中,第一消息管理模塊,用于緩存切換后,將收到的緩存填充消息分發(fā)至對應的設置的N個消息執(zhí)行隊列;并在中斷時間到后,鎖定所有消息執(zhí)行隊列,之后對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,執(zhí)行完畢后對所有消息執(zhí)行隊列解鎖并通知第一 read線程池管理模塊;第一 read線程池管理模塊,用于依據(jù)各消息執(zhí)行對列對應的填充安全時長,調(diào)用read線程依次從對各消息執(zhí)行對列中讀取消息并進行填充處理,并在收到消息管理模塊的通知后,依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用第一 read線程模塊依次從當前各消息執(zhí)行隊列中讀取消息并進行填充處理。上述方案中,該裝置還包括第一處理前端,用于向第一消息管理模塊發(fā)送緩存填充消息;所述第一消息管理模塊,還用于接收第一處理前端發(fā)送的緩存填充消息。本發(fā)明還提供了一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的裝置,該裝置包括第二消息管理模塊、第二 read線程池管理模塊、以及第二 read線程模塊;其中,第二消息管理模塊,用于中斷時間到后,鎖定所述消息初始隊列,通知第二 read線程池管理模塊暫停讀取消息,將所述消息初始隊列中的所有緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,分發(fā)完畢后解鎖所述消息初始隊列,之后對消息執(zhí)行隊列中的消息進行重分配處理,處理完畢后通知第二 read線程池管理模塊;第二 read線程池管理模塊,用于收到消息管理模塊在對消息執(zhí)行隊列中的消息進行重分配處理完畢后發(fā)送的通知后,依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/o和CPU的占用率信息,調(diào)用第二 read線程模塊依次從各消息執(zhí)行隊列中讀取消息并進行填充處理。
上述方案中,該裝置還包括第二處理前端,用于緩存切換后,添加緩存填充消息至所述消息初始隊列。本發(fā)明提供的流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法及裝置,設置N個消息執(zhí)行隊列,緩存切換后,消息管理模塊將收到的緩存填充消息分發(fā)至對應的消息執(zhí)行隊列;中斷時間到,消息管理模塊鎖定所有消息執(zhí)行隊列,之后對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,執(zhí)行完畢后對所有消息執(zhí)行隊列解鎖并通知read線程池管理模塊;read線程池管理模塊依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用read線程依次從當前各消息執(zhí)行隊列中讀取消息并進行填充處理。或者,設置I個消息初始隊列及N個消息執(zhí)行隊列,中斷時間到,消息管理模塊鎖定所述消息初始隊列,通知read線程池管理模塊暫停讀取消息,將所述消息初始隊列中的所有緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,分發(fā)完畢后解鎖所述消息初始隊列,之后對消息執(zhí)行隊列中的消息進行重分配處理,處理完畢后通知read線程池管理模塊;read線程池管理模塊依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前的磁盤I/O和CPU的占用率信息,調(diào)用read線程依次從各消息執(zhí)行隊列中讀取消息并進行填充處理,如此,能有效地減少獲取磁盤I/O和CPU占用率信息的次數(shù),從而減少對服務用戶的時間的占用,提升用戶體驗。另外,本發(fā)明中,中斷時間到,為了提高消息管理模塊對消息進行重分配處理的效率,采用如下方法進行重分配操作如果首消息執(zhí)行隊列Qtl中還有未處理的緩存填充消息,將首消息執(zhí)行隊列Qci中未處理的緩存填充消息移入第二個消息執(zhí)行隊列Q1的隊首,并修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前編號減一,如此,能對安全填充安全時長短的緩存填充消息優(yōu)先進行處理,進一步提升用戶體驗。另外,本發(fā)明中,read線程池管理模塊不是每次調(diào)用read線程時均獲取當前I/0和CPU的占用率信息,而是按照如下方法進行判斷依照執(zhí)行消息隊列的編號依次讀取消息進行處理,當消息執(zhí)行隊列Qi中的消息處理完畢后,如果i為0,則立即從消息執(zhí)行隊列Q1中讀取消息進行處理;否則,根據(jù)獲取的磁盤I/O和CPU的占用率信息,判斷流媒體服務器系統(tǒng)是否繁忙,如果系統(tǒng)繁忙,則等待一段時間后繼續(xù)判斷,當系統(tǒng)空閑時,從消息執(zhí)行隊列Qi+1中讀取消息并進行填充處理,執(zhí)行隊列Qi+1沒有消息,則從執(zhí)行隊列Qi+2讀取消息并進行填充處理,如果執(zhí)行隊列Qi+2也沒有消息,則從執(zhí)行隊列Qi+3讀取消息并進行填充處理,以此類推;收到消息管理模塊的完成重新分配的消息后,重新從首消息執(zhí)行隊列Q。開始,依照執(zhí)行消息隊列的編號依次讀取消息并進行填充處理,此時不管系統(tǒng)是否繁忙,只要消息執(zhí)行隊列Qtl中有消息,則都要讀取消息并進行填充處理。
圖I為雙緩存的動作時間軸示意圖;圖2為本發(fā)明一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法流程示意圖;圖3為本發(fā)明另一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法流程示意圖;
圖4為本發(fā)明實施例流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法流程示意圖;圖5為本發(fā)明一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的裝置結(jié)構(gòu)示意圖;圖6為本發(fā)明另一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的裝置結(jié)構(gòu)示意圖。
具體實施例方式下面結(jié)合附圖及具體實施例對本發(fā)明再作進一步詳細的說明。本發(fā)明流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法,如圖2所示,包括以下步驟步驟200 設置N個消息執(zhí)行隊列,之后執(zhí)行步驟201 ;這里,在執(zhí)行本步驟之前,該方法還可以進一步包括設定緩存大小,根據(jù)緩存大小和用戶帶寬可得出每個用戶對應的緩存的服務時間(ST)。其中,合適的緩存大小能充分發(fā)揮流媒體服務器系統(tǒng)的性能,提高服務用戶數(shù)。具體實現(xiàn)可采用現(xiàn)有技術(shù)。緩存大小確定后,用戶的帶寬越小,則St越長。對于一個流媒體服務器來說,由于它能服務的帶寬種類是有限的,因此對確定的緩存大小,會有一個最大ST,即所有用戶對應的St中最大的ST。依據(jù)最大St及中斷時長,確定N的取值;舉個例子來說,假設最大St為1,中斷時長為0. I,則N = 1/0. 1+1 = 11。其中,設置的N個消息執(zhí)行隊列包含用于存放安全時間到了的緩存填充消息的消息執(zhí)行隊列,即存放中斷次數(shù)為0的緩存填充消息的消息執(zhí)行隊列。這里,在設置消息執(zhí)行對列時,根據(jù)中斷次數(shù)為0、1.......,依次為每個消息執(zhí)行
對列進行編號,可以依次表不為Qc^Q1......Qn-io步驟201 :緩存切換后,消息管理模塊將收到的緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,同時,read線程池管理模塊依據(jù)各消息執(zhí)行對列對應的填充安全時長,調(diào)用read線程依次從對各消息執(zhí)行對列中讀取消息并進行填充處理,之后執(zhí)行步驟202 ;這里,所述消息管理模塊將收到的緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,具體為依據(jù)收到的各緩存填充消息對應的填充安全時長,將各緩存填充消息分發(fā)至相應的消息執(zhí)行隊列,即將填充安全時長為i的緩存填充消息分發(fā)到消息執(zhí)行隊列Qi。其中,i表示填充安全時長所折算成的中斷次數(shù)。其中,所述緩存填充消息中攜帶對應的填充安全時長,所述填充安全時長以中斷次數(shù)為單位,換句話說,所述填充安全時長為折算成中斷次數(shù)的填充安全時長。消息管理模塊收到的緩存填充消息來自處理前端切換緩存而觸發(fā)的緩存填充消
肩、O其中,read線程池管理模塊在調(diào)用read線程依次從對各消息執(zhí)行對列中讀取消息并進行填充處理時,在讀取每個消息執(zhí)行對列中的緩存填充消息并進行填充處理之前,均需要根據(jù)當前磁盤I/o和CPU的占用率信息,判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則從當前待處理的消息執(zhí)行對列中讀取消息并進行填充處理。步驟202 :中斷時間到后,消息管理模塊鎖定所有消息執(zhí)行隊列,之后對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,執(zhí)行完畢后對所有消息執(zhí)行隊列解鎖并通知read線程池管理模塊;這里,如果首消息執(zhí)行隊列Qtl中有未處理的緩存填充消息,則所述對消息執(zhí)行對列中的緩存填充消息進行重分配處理,具體包括將首消息執(zhí)行隊列Qtl中未處理 的緩存填充消息移入第二個消息執(zhí)行隊列Q1的隊首,并修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前編號減一。如果首消息執(zhí)行隊列Qtl中沒有未處理的緩存填充消息,則所述對消息執(zhí)行對列中的緩存填充消息進行重分配處理,具體包括修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前
編號減一。舉個例子來說,首消息執(zhí)行隊列的編號為Qtl,第二個消息執(zhí)行對列的編號為Q1,以此類推,第N個消息執(zhí)行對列的編號為Qn+則在進行重分配處理時,需要將首消息執(zhí)行對列的編號修改為Qim,第二個消息執(zhí)行對列的編號為Qo,以此類推。修改后的第二個消息執(zhí)行隊列,則成為新的首消息執(zhí)行對列,修改后的第三個消息執(zhí)行對列,則成為新的第二個消息執(zhí)行對列,以此類推。步驟203 :所述read線程池管理模塊依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用read線程依次從各消息執(zhí)行隊列中讀取消息并進行填充處理。具體地,如果進行重分配處理后的首消息執(zhí)行隊列Qtl及第二個消息執(zhí)行對列Q1中有未處理的緩存填充消息,則read線程池管理模塊調(diào)用read線程依次讀取首消息執(zhí)行隊列Qtl及第二個消息執(zhí)行對列Q1中的緩存填充消息,并進行填充處理,直至首消息執(zhí)行隊列Qtl及第二個消息執(zhí)行對列Q1中的緩存填充消息處理完,如果沒有,則根據(jù)當前磁盤I/O和CPU的占用率信息,判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第三個消息執(zhí)行對列Q2中的緩存填充消息,并進行填充處理,第三個消息執(zhí)行對列Q2中的緩存填充消息處理完成后,進一步判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第四個消息執(zhí)行對列Q3中的緩存填充消息,并進行填充處理,以此類推。在對每個消息執(zhí)行對列進行處理的過程中,依照執(zhí)行消息隊列的編號依次讀取消息并進行填充處理,即當消息執(zhí)行隊列Qi中的消息處理完畢后,從消息執(zhí)行隊列Qi+1讀取消息并進行填充處理,如果消息執(zhí)行隊列Qi+1中沒有消息,則從消息執(zhí)行隊列Qi+2中讀取消息進行處理,以此類推。換句話說,在進行處理的過程中遵守以下幾條原則
(I)依照執(zhí)行消息隊列的編號依次讀取消息并進行填充處理,即當消息執(zhí)行隊列Qi中的消息處理完畢后,從消息執(zhí)行隊列Qi+1讀取消息并進行填充處理,如果消息執(zhí)行隊列Qi+1中沒有消息,則從消息執(zhí)行隊列Qi+2中讀取消息進行處理,以此類推。(2)當當前消息執(zhí)行隊列Qi中的消息全部被執(zhí)行完后,如果i為0,則立即從消息執(zhí)行隊列Q1中讀取消息進行處理;否則,判 斷磁盤I/O和CPU的占用率,如果系統(tǒng)繁忙,則等待一段時間后繼續(xù)判斷,當系統(tǒng)不忙時,從消息執(zhí)行隊列Qi+1中讀取消息進行處理;(3)收到消息管理模塊的完成重新分配的消息后,重新從首消息執(zhí)行隊列Qtl開始依照執(zhí)行消息隊列的編號依次讀取消息進行處理,此時不管流媒體服務器系統(tǒng)是否繁忙,只要消息執(zhí)行隊列Qtl中有消息,則都要讀取消息進行處理。本發(fā)明還提供了一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法,如圖3所示,包括以下步驟步驟300 :設置I個消息初始隊列及N個消息執(zhí)行隊列;這里,在執(zhí)行本步驟之前,該方法還可以進一步包括設定緩存大小,根據(jù)緩存大小和用戶帶寬可得出每個用戶對應的緩存的ST。其中,合適的緩存大小能充分發(fā)揮系統(tǒng)的性能,提高服務用戶數(shù)。具體實現(xiàn)可采用現(xiàn)有技術(shù)。緩存大小確定后,用戶的帶寬越小,則St越長。對于一個流媒體服務器來說,由于它能服務的帶寬種類是有限的,因此對確定的緩存大小,會有一個最大ST,即所有用戶對應的St中最大的Stoo依據(jù)最大St及中斷時長,確定N的取值;舉個例子來說,假設最大St為I,中斷時長為0. 1,則N= 1/0. 1+1 = 11。其中,設置的N個消息執(zhí)行隊列包含用于存放安全時間到了的緩存填充消息的消息執(zhí)行隊列,即存放中斷次數(shù)為0的緩存填充消息的消息執(zhí)行隊列。這里,在設置消息執(zhí)行對列時,根據(jù)中斷次數(shù)為0、1.......,依次為每個消息執(zhí)行
對列進行編號,可以依次表不為Qc^Q1......Qn-io步驟301 :中斷時間到,消息管理模塊鎖定所述消息初始隊列,通知read線程池管理模塊暫停讀取消息,將所述消息初始隊列中的所有緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,分發(fā)完畢后解鎖所述消息初始隊列,之后對消息執(zhí)行隊列中的消息進行重分配處理,處理完畢后通知read線程池管理模塊;這里,鎖定所述消息初始對列后,消息管理模塊則暫停接收新的緩存填充消息。在執(zhí)行本步驟之前,該方法還可以進一步包括緩存切換后,處理前端添加緩存填充消息至所述消息初始隊列。所述將當前所有的緩存填充消息,分發(fā)至對應的消息執(zhí)行隊列,具體包括依據(jù)各緩存填充消息的填充安全時長,將各緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,即將填充安全時長為i的緩存填充消息,分發(fā)到消息執(zhí)行隊列Qi ;其中,i表示填充安全時長所折算成的中斷次數(shù)。其中,所述緩存填充消息中攜帶對應的填充安全時長,所述填充安全時長以中斷次數(shù)為單位,換句話說,所述填充安全時長為折算成中斷次數(shù)的填充安全時長。收到消息管理模塊暫停讀取消息后,read線程池管理模塊暫停讀取消息并進行填充處理。
這里,如果首消息執(zhí)行隊列Qtl中有未處理的緩存填充消息,則所述對消息執(zhí)行對列中的緩存填充消息進行重分配處理,具體包括將首消息執(zhí)行隊列Qtl中未處理的緩存填充消息移入第二個消息執(zhí)行隊列Q1的隊首,并修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前編號減一。如果首消息執(zhí)行隊列Qtl中沒有未處理的緩存填充消息,則所述對消息執(zhí)行對列中的緩存填充消息進行重分配處理,具體包括修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前
編號減一。 舉個例子來說,首消息執(zhí)行隊列的編號為Qtl,第二個消息執(zhí)行對列的編號為Q1,以此類推,第N個消息執(zhí)行對列的編號為Qn+則在進行重分配處理時,需要將首消息執(zhí)行對列的編號修改為Qim,第二個消息執(zhí)行對列的編號為Qo,以此類推。修改后的第二個消息執(zhí)行隊列,則成為新的首消息執(zhí)行對列,修改后的第三個消息執(zhí)行對列,則成為新的第二個消息執(zhí)行對列,以此類推。步驟302 :read線程池管理模塊依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/o和CPU的占用率信息,調(diào)用read線程依次從各消息執(zhí)行隊列中讀取消息并進行填充處理。具體地,如果進行重分配處理后的首消息執(zhí)行隊列Qtl及第二個消息執(zhí)行對列Q1中有未處理的緩存填充消息,則read線程池管理模塊調(diào)用read線程依次讀取首消息執(zhí)行隊列Qtl及第二個消息執(zhí)行對列Q1中的緩存填充消息,并進行填充處理,直至首消息執(zhí)行隊列Qtl及第二個消息執(zhí)行對列Q1中的緩存填充消息處理完,如果沒有,則根據(jù)當前磁盤I/O和CPU的占用率信息,判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第三個消息執(zhí)行對列Q2中的緩存填充消息,并進行填充處理,第三個消息執(zhí)行對列Q2中的緩存填充消息處理完成后,進一步判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第四個消息執(zhí)行對列Q3中的緩存填充消息,并進行填充處理,以此類推。在對每個消息執(zhí)行對列進行處理的過程中,依照執(zhí)行消息隊列的編號依次讀取消息并進行填充處理,即當消息執(zhí)行隊列Qi中的消息處理完畢后,從消息執(zhí)行隊列Qi+1讀取消息進行處理,如果消息執(zhí)行隊列Qi+1中沒有消息,則從消息執(zhí)行隊列Qi+2中讀取消息并進行填充處理,以此類推。換句話說,在進行處理的過程中遵守以下幾條原則(I)依照執(zhí)行消息隊列的編號依次讀取消息進行處理,即當消息執(zhí)行隊列Qi中的消息處理完畢后,從消息執(zhí)行隊列Qi+1讀取消息進行處理,如果消息執(zhí)行隊列Qi+1沒有消息,則從消息執(zhí)行隊列Qi+2中讀取消息進行處理,以此類推;(2)當當前消息執(zhí)行隊列Qi中的消息全部被執(zhí)行完后,如果i為0,則立即從消息執(zhí)行隊列Q1中讀取消息進行處理;否則,判斷磁盤I/O和CPU的占用率,如果流媒體服務器系統(tǒng)繁忙,則等待一段時間后繼續(xù)判斷,當流媒體服務器系統(tǒng)不忙時,從消息執(zhí)行隊列Qi+1中讀取消息進行處理;
(3)收到消息管理模塊暫停讀取消息后則暫停讀取消息;(4)收到消息管理模塊的完成重新分配的消息后,重新從首消息執(zhí)行隊列Qtl開始依照執(zhí)行消息隊列的編號依次讀取消息進行處理, 此時不管流媒體服務器系統(tǒng)是否繁忙,只要消息執(zhí)行隊列Qtl中有消息,則都要讀取消息進行處理。下面結(jié)合實施例對本發(fā)明再作進一步詳細的描述。本實施例采用read消息隊列采用二級架構(gòu)的方式,即設置I個消息初始隊列和N個消息執(zhí)行隊列,緩存切換后,處理前端先添加緩存填充消息至消息初始隊列;中斷時間到后,再由消息管理模塊將所述消息初始隊列中當前所有的緩存填充消息,分發(fā)至對應的消息執(zhí)行隊列,然后對執(zhí)行隊列進行重分配處理,處理完畢后通知read線程池管理模塊,從而進行讀取消息及填充的處理。本實施例流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法,如圖4所示,包括以下步驟步驟400 :設定緩存大小,根據(jù)緩存大小和用戶帶寬,得出每個用戶對應的緩存的St,之后執(zhí)彳了步驟401 ;其中,本步驟的具體實現(xiàn)可采用現(xiàn)有技術(shù)。步驟401 :設置I個消息初始隊列和N個消息執(zhí)行隊列;這里,依據(jù)最大St及中斷時長,確定N的取值;舉個例子來說,假設最大St為1,中斷時長為0. 1,則N= 1/0. 1+1 = 11。其中,設置的N個消息執(zhí)行隊列包含用于存放安全時間到了的緩存填充消息的消息執(zhí)行隊列,即存放中斷次數(shù)為0的緩存填充消息的消息執(zhí)行隊列。這里,在設置消息執(zhí)行對列時,根據(jù)中斷次數(shù)為0、1.......,依次為每個消息執(zhí)行
對列進行編號,可以依次表不為Qc^Q1......Qn-io步驟402 :緩存切換后,處理前端添加緩存填充消息至所述消息初始隊列;步驟403 :中斷時間到,消息管理模塊鎖定所述消息初始隊列,通知read線程池管理模塊暫停讀取消息,將所述消息初始隊列中當前所有緩存填充消息,分發(fā)至對應的消息執(zhí)行隊列,分發(fā)完畢后解鎖消息初始隊列,之后對消息執(zhí)行隊列進行重分配處理,處理完畢后通知read線程池管理模塊;這里,當消息管理模塊鎖定所述消息初始隊列后,處理前端則不能再添加緩存填充消息至所述初始隊列。所述將當前所有緩存填充消息,分發(fā)至對應的消息執(zhí)行隊列,具體包括依據(jù)各緩存填充消息的填充安全時長,將各緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,即填充安全時長為I的緩存填充消息分發(fā)到執(zhí)行隊列Q1,填充安全時長為2的緩存填充消息分發(fā)到執(zhí)行隊列Q2,依次類推。其中,所述緩存填充消息中攜帶對應的填充安全時長,所述填充安全時長以中斷次數(shù)為單位,換句話說,所述填充安全時長為折算成中斷次數(shù)的填充安全時長。如果首消息執(zhí)行隊列Qtl中有未處理的緩存填充消息,則所述對消息執(zhí)行對列中的緩存填充消息進行重分配處理,具體包括將首消息執(zhí)行隊列Qtl中未處理的緩存填充消息移入第二個消息執(zhí)行隊列Q1的隊首,并修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前編號減一。
如果首消息執(zhí)行隊列Qtl中沒有未處理的緩存填充消息,則所述對消息執(zhí)行對列中的緩存填充消息進行重分配處理,具 體包括修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前
編號減一。舉個例子來說,首消息執(zhí)行隊列的編號為Qtl,第二個消息執(zhí)行對列的編號為Q1,以此類推,第N個消息執(zhí)行對列的編號為Qn+則在進行重分配處理時,需要將首消息執(zhí)行對列的編號修改為Qim,第二個消息執(zhí)行對列的編號為Qo,以此類推。修改后的第二個消息執(zhí)行隊列,則成為新的首消息執(zhí)行對列,修改后的第三個消息執(zhí)行對列,則成為新的第二個消息執(zhí)行對列,以此類推。解鎖所述read初始隊列后,處理前端則能添加緩存填充消息至所述初始隊列。其中,所述未處理的緩存填充消息是指未進行讀取并進行填充處理的緩存填充消息。步驟404 read線程池管理模塊依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前的磁盤I/O和CPU的占用率信息,調(diào)用read線程依次從各消息執(zhí)行隊列中讀取消息并進行填充處理;具體地,如果進行重分配處理后的首消息執(zhí)行隊列Qtl及第二個消息執(zhí)行對列Q1中有未處理的緩存填充消息時,read線程池管理模塊調(diào)用read線程依次讀取首消息執(zhí)行隊列Qtl及第二個消息執(zhí)行對列Q1中的緩存填充消息,并進行填充處理,直至首消息執(zhí)行隊列Qtl及第二個消息執(zhí)行對列Q1中的緩存填充消息處理完,如果沒有,則根據(jù)當前磁盤I/O和CPU的占用率信息,判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第三個消息執(zhí)行對列Q2中的緩存填充消息,并進行填充處理,第三個消息執(zhí)行對列Q2中的緩存填充消息處理完成后,進一步判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第四個消息執(zhí)行對列Q3中的緩存填充消息,并進行填充處理,以此類推。在對每個消息執(zhí)行對列進行處理的過程中,依照執(zhí)行消息隊列的編號依次讀取消息并進行填充處理,即當消息執(zhí)行隊列Qi中的消息處理完畢后,從消息執(zhí)行隊列Qi+1讀取消息進行處理,如果消息執(zhí)行隊列Qi+1中沒有消息,則從消息執(zhí)行隊列Qi+2中讀取消息并進行填充處理,以此類推。換句話說,在進行處理的過程中遵守以下幾條原則(I)依照執(zhí)行消息隊列的編號依次讀取消息進行處理,即當消息執(zhí)行隊列Qi中的消息處理完畢后,從消息執(zhí)行隊列Qi+1讀取消息進行處理,如果消息執(zhí)行隊列Qi+1沒有消息,則從消息執(zhí)行隊列Qi+2中讀取消息進行處理,以此類推;(2)當當前消息執(zhí)行隊列Qi中的消息全部被執(zhí)行完后,如果i為0,則立即從消息執(zhí)行隊列Q1中讀取消息進行處理;否則,判斷磁盤I/O和CPU的占用率,如果流媒體服務器系統(tǒng)繁忙,則等待一段時間后繼續(xù)判斷,當流媒體服務器系統(tǒng)不忙時,從消息執(zhí)行隊列Qi+1中讀取消息進行處理;(3)收到消息管理模塊暫停讀取消息后則暫停讀取消息;(4)收到消息管理模塊的完成重新分配的消息后,重新從首消息執(zhí)行隊列Qtl開始依照執(zhí)行消息隊列的編號依次讀取消息進行處理,此時不管流媒體服務器系統(tǒng)是否繁忙,只要消息執(zhí)行隊列Qtl中有消息,則都要讀取消息進行處理。從上面的描述中可以 看出,本發(fā)明的技術(shù)方案,從根本上來講,是對收到的緩存填充消息采取集中式統(tǒng)一管理,以減少獲取磁盤I/o和CPU的占用率信息的次數(shù);另外,對安全填充安全時長短的緩存填充消息優(yōu)先進行處理。這里,需要說明的是熟悉本領(lǐng)域的人可對實施步驟進行一些修改和變通如read消息隊列不采用二級架構(gòu),刪除初始隊列,只保留執(zhí)行隊列,緩存切換后,直接發(fā)送緩存填充消息給消息處理模塊,消息處理模塊對消息進行分類并下發(fā)到對應的執(zhí)行模塊;不采用read線程池方式,而是采用隨用隨建線程方式或者采用單線程方式。但只要這些改變和變形都是以集中統(tǒng)一管理緩存填充消息為基礎(chǔ),則都屬于本發(fā)明所附的權(quán)利要求的保護范圍。為實現(xiàn)圖2所示的方法,本發(fā)明還提供了一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的裝置,如圖5所示,該裝置包括第一消息管理模塊51、第一 read線程池管理模塊52、以及第
一read線程模塊53 ;其中,第一消息管理模塊51,用于緩存切換后,將收到的緩存填充消息分發(fā)至對應的設置的N個消息執(zhí)行隊列;并在中斷時間到后,鎖定所有消息執(zhí)行隊列,之后對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,執(zhí)行完畢后對所有消息執(zhí)行隊列解鎖并通知第一 read線程池管理模塊52 ;第一 read線程池管理模塊52,用于依據(jù)各消息執(zhí)行對列對應的填充安全時長,調(diào)用read線程依次從對各消息執(zhí)行對列中讀取消息并進行填充處理,并在收到第一消息管理模塊51的通知后,依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用第一 read線程模塊53依次從當前各消息執(zhí)行隊列中讀取消息并進行填充處理。其中,該裝置還可以進一步包括第一處理前端,用于向第一消息管理模塊51發(fā)送緩存填充消息;所述第一消息管理模塊51,還用于接收第一處理前端發(fā)送的緩存填充消息。這里,本發(fā)明的所述裝置中的第一消息管理模塊及第一 read線程池管理模塊的具體處理過程已在上文中詳述,不再贅述。為實現(xiàn)圖3所示的方法,本發(fā)明還提供了一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的裝置,如圖6所示,該裝置包括第二消息管理模塊61、第二 read線程池管理模塊62、以及第
二read線程模塊63 ;其中,第二消息管理模塊61,用于中斷時間到后,鎖定所述消息初始隊列,通知第二read線程池管理模塊62暫停讀取消息,將所述消息初始隊列中的所有緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,分發(fā)完畢后解鎖所述消息初始隊列,之后對消息執(zhí)行隊列中的消息進行重分配處理,處理完畢后通知第二 read線程池管理模塊62 ;第二 read線程池管理模塊62,用于收到第二消息管理模塊61在對消息執(zhí)行隊列中的消息進行重分配處理完畢后發(fā)送的通知后,依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前的磁盤I/o和CPU的占用率信息,調(diào)用第二 read線程模塊63依次從各消息執(zhí)行隊列中讀取消息并進行填充處理。
其中,該裝置還可以進一步包括第二處理前端,用于緩存切換后,添加緩存填充消息至所述消息初始隊列。這里,本發(fā)明的所述裝置中的第二消息管理模塊及第二 read線程池管理模塊的 具體處理過程已在上文中詳述,不再贅述。以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。
權(quán)利要求
1.一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法,其特征在于,該方法包括 設置N個消息執(zhí)行隊列; 緩存切換后,消息管理模塊將收到的緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,同時,讀(read)線程池管理模塊依據(jù)各消息執(zhí)行對列對應的填充安全時長,調(diào)用read線程依次從對各消息執(zhí)行對列中讀取消息并進行填充處理; 中斷時間到后,消息管理模塊鎖定所有消息執(zhí)行隊列,之后對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,執(zhí)行完畢后對所有消息執(zhí)行隊列解鎖并通知read線程池管理模塊; read線程池管理模塊依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用read線程依次從當前各消息執(zhí)行隊列中讀取消息并進行填充處理。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述設置N個消息執(zhí)行隊列,為 依據(jù)設定的緩存的最大服務時間及中斷時長,設置N個消息執(zhí)行隊列。
3.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,該方法還包括 緩存切換后,處理前端向消息管理模塊發(fā)送緩存填充消息。
4.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,所述消息管理模塊將收到的緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,包括 依據(jù)收到的各緩存填充消息對應的填充安全時長,將各緩存填充消息分發(fā)至對應的消息執(zhí)行隊列。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,在設置N個消息執(zhí)行隊列時,該方法進一步包括依據(jù)中斷次數(shù),依次為每個消息執(zhí)行對列進行編號; 相應的,如果首消息執(zhí)行隊列中有未處理的緩存填充消息,所述對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,包括 將首消息執(zhí)行隊列中未處理的緩存填充消息移入第二個消息執(zhí)行隊列的隊首,并修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前編號減一。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,如果首消息執(zhí)行隊列中沒有未處理的緩存填充消息,所述對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,包括 修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前編號減一。
7.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/o和CPU的占用率信息,調(diào)用read線程依次從當前各消息執(zhí)行隊列中讀取消息并進行填充處理,包括 如果進行重分配處理后的首消息執(zhí)行隊列及第二個消息執(zhí)行對列中有未處理的緩存填充消息,則read線程池管理模塊調(diào)用read線程依次讀取首消息執(zhí)行隊列及第二個消息執(zhí)行對列中的緩存填充消息,并進行填充處理,直至首消息執(zhí)行隊列及第二個消息執(zhí)行對列中的緩存填充消息處理完,如果沒有,則根據(jù)當前磁盤I/O和CPU的占用率信息,判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第三個消息執(zhí)行對列中的緩存填充消息,并進行填充處理,第三個消息執(zhí)行對列中的緩存填充消息處理完成后,進一步判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第四個消息執(zhí)行對列中的緩存填充消息,并進行填充處理,以此類推。
8.一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法,其特征在于,該方法包括 設置I個消息初始隊列及N個消息執(zhí)行隊列; 中斷時間到后,消息管理模塊鎖定所述消息初始隊列,通知read線程池管理模塊暫停讀取消息,將所述消息初始隊列中的所有緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,分發(fā)完畢后解鎖所述消息初始隊列,之后對消息執(zhí)行隊列中的消息進行重分配處理,處理完畢后通知read線程池管理模塊; read線程池管理模塊依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和 CPU的占用率信息,調(diào)用read線程依次從各消息執(zhí)行隊列中讀取消息并進行填充處理。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述設置N個消息執(zhí)行隊列,為 依據(jù)設定的緩存的最大服務時間及中斷時長,設置N個消息執(zhí)行隊列。
10.根據(jù)權(quán)利要求8或9所述的方法,其特征在于,該方法還包括 緩存切換后,處理前端添加緩存填充消息至所述消息初始隊列。
11.根據(jù)權(quán)利要求8或9所述的方法,其特征在于,所述將所述消息初始隊列中的所有緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,包括 依據(jù)各緩存填充消息的填充安全時長,將各緩存填充消息分發(fā)至對應的消息執(zhí)行隊列。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,在設置N個消息執(zhí)行隊列時,該方法進一步包括依據(jù)中斷次數(shù),依次為每個消息執(zhí)行對列進行編號;相應的,如果首消息執(zhí)行隊列中有未處理的緩存填充消息,所述對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,包括 將首消息執(zhí)行隊列中未處理的緩存填充消息移入第二個消息執(zhí)行隊列的隊首,并修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前編號減一。
13.根據(jù)權(quán)利要求12所述的方法,其特征在于,如果首消息執(zhí)行隊列中沒有未處理的緩存填充消息,所述對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,包括 修改首消息執(zhí)行隊列的編號為N-1,同時修改其它各消息執(zhí)行隊列的編號為當前編號減一。
14.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用read線程依次從當前各消息執(zhí)行隊列中讀取消息并進行填充處理,包括 如果進行重分配處理后的首消息執(zhí)行隊列及第二個消息執(zhí)行對列中有未處理的緩存填充消息,則read線程池管理模塊調(diào)用read線程依次讀取首消息執(zhí)行隊列及第二個消息執(zhí)行對列中的緩存填充消息,并進行填充處理,直至首消息執(zhí)行隊列及第二個消息執(zhí)行對列中的緩存填充消息處理完,如果沒有,則根據(jù)當前磁盤I/O和CPU的占用率信息,判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第三個消息執(zhí)行對列中的緩存填充消息,并進行填充處理,第三個消息執(zhí)行對列中的緩存填充消息處理完成后,進一步判斷流媒體服務器系統(tǒng)是否繁忙,如果繁忙,則等待預設時長后繼續(xù)判斷流媒體服務器系統(tǒng)是否繁忙,如果空閑,則讀取第四個消息執(zhí)行對列中的緩存填充消息,并進行填充處理,以此類推。
15.一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的裝置,其特征在于,該裝置包括第一消息管理模塊、第一 read線程池管理模塊、以及第一 read線程模塊;其中, 第一消息管理模塊,用于緩存切換后,將收到的緩存填充消息分發(fā)至對應的設置的N個消息執(zhí)行隊列;并在中斷時間到后,鎖定所有消息執(zhí)行隊列,之后對消息執(zhí)行隊列中的緩存填充消息進行重分配處理,執(zhí)行完畢后對所有消息執(zhí)行隊列解鎖并通知第一 read線程池管理模塊; 第一 read線程池管理模塊,用于依據(jù)各消息執(zhí)行對列對應的填充安全時長,調(diào)用read線程依次從對各消息執(zhí)行對列中讀取消息并進行填充處理,并在收到消息管理模塊的通知后,依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用第一 read線程模塊依次從當前各消息執(zhí)行隊列中讀取消息并進行填充處理。
16.根據(jù)權(quán)利要求15所述的裝置,其特征在于,該裝置還包括第一處理前端,用于向第一消息管理模塊發(fā)送緩存填充消息; 所述第一消息管理模塊,還用于接收第一處理前端發(fā)送的緩存填充消息。
17.一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的裝置,其特征在于,該裝置包括第二消息管理模塊、第二 read線程池管理模塊、以及第二 read線程模塊;其中, 第二消息管理模塊,用于中斷時間到后,鎖定所述消息初始隊列,通知第二 read線程池管理模塊暫停讀取消息,將所述消息初始隊列中的所有緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,分發(fā)完畢后解鎖所述消息初始隊列,之后對消息執(zhí)行隊列中的消息進行重分配處理,處理完畢后通知第二 read線程池管理模塊; 第二 read線程池管理模塊,用于收到消息管理模塊在對消息執(zhí)行隊列中的消息進行重分配處理完畢后發(fā)送的通知后,依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用第二 read線程模塊依次從各消息執(zhí)行隊列中讀取消息并進行填充處理。
18.根據(jù)權(quán)利要求17所述的裝置,其特征在于,該裝置還包括第二處理前端,用于緩存切換后,添加緩存填充消息至所述消息初始隊列。
全文摘要
本發(fā)明公開了一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的方法,該方法包括設置消息初始隊列及N個消息執(zhí)行隊列;中斷時間到后,消息管理模塊鎖定消息初始隊列,將消息初始隊列中的所有緩存填充消息分發(fā)至對應的消息執(zhí)行隊列,分發(fā)完畢后解鎖消息初始隊列,之后對消息執(zhí)行隊列中的消息進行重分配處理,處理完畢后通知read線程池管理模塊;read線程池管理模塊依據(jù)各消息執(zhí)行隊列對應的填充安全時長、以及當前磁盤I/O和CPU的占用率信息,調(diào)用read線程依次從各消息執(zhí)行隊列中讀取消息并進行填充處理。本發(fā)明同時還公開了一種流媒體雙緩存技術(shù)中填充數(shù)據(jù)的裝置,采用本發(fā)明的方法及裝置,能有效地減少獲取磁盤I/O和CPU占用率信息的次數(shù)。
文檔編號H04L29/06GK102638402SQ20121008645
公開日2012年8月15日 申請日期2012年3月28日 優(yōu)先權(quán)日2012年3月28日
發(fā)明者鞠紅兵 申請人:中興通訊股份有限公司