本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及數(shù)據(jù)處理方法、裝置及終端。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,互聯(lián)網(wǎng)中的數(shù)據(jù)呈爆發(fā)式增長(zhǎng),為了提升數(shù)據(jù)處理速度,可以采用多線程技術(shù)進(jìn)行數(shù)據(jù)處理。以網(wǎng)絡(luò)爬蟲為例,網(wǎng)絡(luò)爬蟲是一個(gè)自動(dòng)提取網(wǎng)頁(yè)的程序,它為搜索引擎從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè),是搜索引擎的重要組成。在傳統(tǒng)網(wǎng)頁(yè)爬取技術(shù)中,為了提升網(wǎng)頁(yè)爬取速度,往往采用多線程技術(shù)進(jìn)行爬取。其中每個(gè)線程各自負(fù)責(zé)網(wǎng)頁(yè)數(shù)據(jù)的解析和持久化,例如采用三個(gè)線程進(jìn)行網(wǎng)頁(yè)爬取,第一線程對(duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行解析,并將解析得到的網(wǎng)頁(yè)數(shù)據(jù)寫入數(shù)據(jù)庫(kù)之后才可以釋放占用的系統(tǒng)資源,同理,第二線程對(duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行解析,并將解析得到的網(wǎng)頁(yè)數(shù)據(jù)寫入數(shù)據(jù)庫(kù)之后才可以釋放占用的系統(tǒng)資源,第三線程對(duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行解析,并將解析得到的網(wǎng)頁(yè)數(shù)據(jù)寫入數(shù)據(jù)庫(kù)之后才可以釋放占用的系統(tǒng)資源,則各個(gè)線程占用的系統(tǒng)資源的時(shí)間較長(zhǎng),降低系統(tǒng)資源利用率。另外,每個(gè)線程在爬取網(wǎng)頁(yè)數(shù)據(jù)、對(duì)爬取到的網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行解析以及持久化存儲(chǔ)之后,才可以結(jié)束本次流程,以便再次執(zhí)行爬取網(wǎng)頁(yè)數(shù)據(jù)、對(duì)爬取到的網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行解析以及持久化存儲(chǔ)的操作,導(dǎo)致爬取網(wǎng)頁(yè)數(shù)據(jù)的效率較低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種數(shù)據(jù)處理方法、裝置及終端,可提高系統(tǒng)資源利用率,并提升第一線程獲取數(shù)據(jù)的數(shù)據(jù)獲取效率。
一方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)處理方法,所述方法應(yīng)用于終端,所述終端運(yùn)行有第一線程和第二線程,所述方法包括:
通過(guò)所述第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中;
釋放所述第一線程所占用的系統(tǒng)資源,所述系統(tǒng)資源包括cpu資源、內(nèi)存資源或者i/o資源;
通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
相應(yīng)地,本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)處理裝置,所述裝置應(yīng)用于終端,所述終端運(yùn)行有第一線程和第二線程,所述裝置包括:
數(shù)據(jù)獲取單元,用于通過(guò)所述第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中;
資源釋放單元,用于釋放所述第一線程所占用的系統(tǒng)資源,所述系統(tǒng)資源包括cpu資源、內(nèi)存資源或者i/o資源;
數(shù)據(jù)存儲(chǔ)單元,用于通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
相應(yīng)地,本發(fā)明實(shí)施例還提供了一種終端,該終端包括所述的數(shù)據(jù)處理裝置。
本發(fā)明實(shí)施例可以通過(guò)第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將該數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中之后,釋放第一線程所占用的系統(tǒng)資源,可提升資源利用率,另外,通過(guò)第一線程獲取需要存儲(chǔ)的數(shù)據(jù),然后通過(guò)第二線程將該數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù),可提升第一線程獲取數(shù)據(jù)的數(shù)據(jù)獲取效率。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例的一種數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖;
圖2是本發(fā)明實(shí)施例中的一種數(shù)據(jù)處理方法的流程示意圖;
圖3是本發(fā)明實(shí)施例的另一種數(shù)據(jù)處理方法的流程示意圖;
圖4是本發(fā)明實(shí)施例的一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖;
圖5是本發(fā)明實(shí)施例的一種終端的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例可以通過(guò)第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將該數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中,進(jìn)而釋放第一線程所占用的系統(tǒng)資源,相對(duì)傳統(tǒng)的數(shù)據(jù)處理方法中第一線程獲取需要存儲(chǔ)的數(shù)據(jù),將該數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中之后,才可以釋放第一線程所占用的系統(tǒng)資源,本發(fā)明實(shí)施例可及時(shí)釋放系統(tǒng)資源,以提高系統(tǒng)資源利用率。另外,本發(fā)明實(shí)施例中第一線程用于獲取需要存儲(chǔ)的數(shù)據(jù),并將該數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中,所述第一線程可以為一個(gè)網(wǎng)頁(yè)爬蟲線程。第二線程用于在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將該數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,所述第二線程可以專用于存儲(chǔ)網(wǎng)頁(yè)爬蟲線程爬取的數(shù)據(jù)。本發(fā)明實(shí)施例中第一線程將數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中之后,可重新分配系統(tǒng)資源,并使用重新分配的系統(tǒng)資源再次獲取需要存儲(chǔ)的數(shù)據(jù),相對(duì)傳統(tǒng)的數(shù)據(jù)處理方法中第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將該數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中之后,才可以重新分配系統(tǒng)資源,并使用重新分配的系統(tǒng)資源再次獲取需要存儲(chǔ)的數(shù)據(jù),本發(fā)明實(shí)施例可提升第一線程獲取數(shù)據(jù)的數(shù)據(jù)獲取效率。
基于上述原理,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)處理系統(tǒng),該系統(tǒng)可以為諸如網(wǎng)頁(yè)爬取系統(tǒng)、多文件傳輸系統(tǒng)等互聯(lián)網(wǎng)應(yīng)用系統(tǒng)。參見(jiàn)圖1,該數(shù)據(jù)處理系統(tǒng)的架構(gòu)至少包括:至少一個(gè)第一線程、任務(wù)隊(duì)列以及至少一個(gè)第二線程。
其中,至少一個(gè)第一線程用于獲取需要存儲(chǔ)的數(shù)據(jù),并將該數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中。例如,在網(wǎng)頁(yè)爬取過(guò)程中,第一線程將爬取到的網(wǎng)頁(yè)數(shù)據(jù)寫入任務(wù)隊(duì)列之后,就可以結(jié)束該第一線程,并釋放第一線程所占用的系統(tǒng)資源,進(jìn)而可以啟動(dòng)新的第一線程,重新給該新的第一線程分配系統(tǒng)資源,并通過(guò)該第一線程使用重新分配的系統(tǒng)資源爬取其他網(wǎng)頁(yè)數(shù)據(jù)。又如,在多文件傳輸過(guò)程中,第一線程獲取到需要傳輸?shù)奈募?shù)據(jù)之后,將該文件數(shù)據(jù)寫入任務(wù)隊(duì)列之后,就可以結(jié)束該第一線程,并釋放第一線程所占用的系統(tǒng)資源,進(jìn)而可以啟動(dòng)新的第一線程,重新給該新的第一線程分配系統(tǒng)資源,并通過(guò)該第一線程使用重新分配的系統(tǒng)資源獲取其他文件數(shù)據(jù)。
任務(wù)隊(duì)列可以配置在終端的內(nèi)存中,內(nèi)存例如只讀存儲(chǔ)器(readonlymemory,rom)、隨機(jī)存儲(chǔ)器(randomaccessmemory,ram)或者高速緩沖存儲(chǔ)器(cache)等。該任務(wù)隊(duì)列可以是無(wú)鎖隊(duì)列,即第一線程寫入數(shù)據(jù)時(shí)無(wú)需觸發(fā)寫入鎖,第二線程讀取數(shù)據(jù)時(shí)無(wú)需觸發(fā)讀取鎖,可確保多個(gè)第一線程同時(shí)將數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中,以實(shí)現(xiàn)并行寫入數(shù)據(jù)。
第二線程可以在任務(wù)隊(duì)列中獲取一個(gè)數(shù)據(jù),并將該數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。例如,在網(wǎng)頁(yè)爬取過(guò)程中,第二線程可以在任務(wù)隊(duì)列中獲取網(wǎng)頁(yè)數(shù)據(jù),并將該網(wǎng)頁(yè)數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。又如,在多文件傳輸過(guò)程中,第二線程可以在任務(wù)隊(duì)列中獲取文件數(shù)據(jù),并將該文件數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。可選的,當(dāng)存在多個(gè)數(shù)據(jù)庫(kù)時(shí),終端可以運(yùn)行多個(gè)第二線程,其中第二線程和數(shù)據(jù)庫(kù)對(duì)應(yīng)(當(dāng)然也可以一個(gè)第二線程對(duì)應(yīng)多個(gè)數(shù)據(jù)庫(kù),也可以多個(gè)第二線程對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)),第二線程在任務(wù)隊(duì)列中獲取到數(shù)據(jù)之后,可以將該數(shù)據(jù)存儲(chǔ)到該第二線程對(duì)應(yīng)的數(shù)據(jù)庫(kù)中。
其中,第一線程和第二線程可以運(yùn)行在終端中,終端可以為筆記本電腦、手機(jī)、pad(平板電腦)、車載終端、智能可穿戴設(shè)備等設(shè)備。終端中可以運(yùn)行至少一種類型的互聯(lián)網(wǎng)應(yīng)用,包括但不限于:即時(shí)通信應(yīng)用、sns應(yīng)用等等。用戶可以通過(guò)終端使用互聯(lián)網(wǎng)應(yīng)用,例如:用戶可通過(guò)終端將文件數(shù)據(jù)上傳到服務(wù)器;或者,用戶可通過(guò)終端使用搜索引擎進(jìn)行網(wǎng)頁(yè)爬??;等等。
其中,系統(tǒng)資源可以包括中央處理器(centralprocessingunit,cpu)資源、內(nèi)存資源或者輸入輸出(input/output,i/o)資源等。
目前,采用多線程技術(shù)并行爬取網(wǎng)頁(yè)數(shù)據(jù)之后,相關(guān)線程要繼續(xù)執(zhí)行網(wǎng)頁(yè)內(nèi)容解析和數(shù)據(jù)持久化存儲(chǔ)的完整流程。其中的數(shù)據(jù)持久化存儲(chǔ)環(huán)節(jié),由于需要去除重復(fù)項(xiàng)、寫入數(shù)據(jù)庫(kù)等操作,依然耗時(shí)較長(zhǎng),使得線程占用的系統(tǒng)資源不能及時(shí)釋放?;诖?,本發(fā)明實(shí)施例將獲取到的數(shù)據(jù)存儲(chǔ)到一個(gè)單獨(dú)的任務(wù)隊(duì)列中,讓每個(gè)第一線程不用關(guān)注持久化存儲(chǔ)的環(huán)節(jié),盡快結(jié)束自己的任務(wù)并釋放系統(tǒng)資源,可提高系統(tǒng)資源利用率。主線程此時(shí)可以啟動(dòng)新的線程獲取其他數(shù)據(jù),第一線程從發(fā)起數(shù)據(jù)獲取請(qǐng)求開始,到數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列為終止,不涉及持久化存儲(chǔ),其中的持久化存儲(chǔ)相對(duì)于網(wǎng)頁(yè)數(shù)據(jù)爬取是一個(gè)完全獨(dú)立的過(guò)程,第二線程的執(zhí)行時(shí)間長(zhǎng)短,不再影響第一線程的繼續(xù)執(zhí)行和結(jié)束,可提高第一線程獲取數(shù)據(jù)的數(shù)據(jù)獲取效率。
其中,第二線程是一個(gè)持續(xù)運(yùn)行的長(zhǎng)進(jìn)程任務(wù)。例如,它持續(xù)檢查任務(wù)隊(duì)列中有無(wú)新的數(shù)據(jù),如果有,則取出一個(gè)數(shù)據(jù)進(jìn)行持久化存儲(chǔ),完成之后繼續(xù)查詢并取出下一個(gè)數(shù)據(jù)進(jìn)行持久化存儲(chǔ);如果任務(wù)隊(duì)列為空,第二線程按需進(jìn)入特定時(shí)長(zhǎng)的休眠進(jìn)程以節(jié)省系統(tǒng)資源,直到下一次喚醒。又如,第二線程從上一次在任務(wù)隊(duì)列中獲取數(shù)據(jù)開始經(jīng)過(guò)預(yù)設(shè)時(shí)長(zhǎng)之后,在任務(wù)隊(duì)列中取出一個(gè)數(shù)據(jù)進(jìn)行持久化存儲(chǔ)。
基于圖1所示的數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖,請(qǐng)參見(jiàn)圖2,圖2是本發(fā)明實(shí)施例的一種數(shù)據(jù)處理方法的流程示意圖,本發(fā)明實(shí)施例的數(shù)據(jù)處理方法可以在各種終端中執(zhí)行,該終端運(yùn)行有第一線程和第二線程。具體的,本發(fā)明實(shí)施例的所述方法包括如下步驟。
s201:通過(guò)第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中。
終端可以通過(guò)第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中。例如,終端可以通過(guò)第一線程爬取網(wǎng)頁(yè)數(shù)據(jù),并將該網(wǎng)頁(yè)數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中。又如,終端可以通過(guò)第一線程獲取需要上傳到云端的文件數(shù)據(jù),并將該文件數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中。
可選的,若終端運(yùn)行有至少一個(gè)第一線程,則終端可以通過(guò)至少一個(gè)第一線程分別獲取需要存儲(chǔ)的數(shù)據(jù),并通過(guò)各個(gè)第一線程將獲取到的數(shù)據(jù)并行存儲(chǔ)到任務(wù)隊(duì)列中。例如,終端運(yùn)行有三個(gè)第一線程,分別為第一線程1,第一線程2,以及第一線程3,終端可以分別通過(guò)第一線程1獲取數(shù)據(jù)1,通過(guò)第二線程2獲取數(shù)據(jù)2,通過(guò)第三線程3獲取數(shù)據(jù)3,進(jìn)而通過(guò)第一線程1將數(shù)據(jù)1存儲(chǔ)到任務(wù)隊(duì)列中,通過(guò)第一線程2將數(shù)據(jù)2存儲(chǔ)到任務(wù)隊(duì)列中,通過(guò)第一線程3將數(shù)據(jù)3存儲(chǔ)到任務(wù)隊(duì)列中。
需要說(shuō)明的是,第一線程將數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列的過(guò)程可以是無(wú)鎖寫入過(guò)程,示例性的,終端可以采用騰訊云消息服務(wù)(cloudmessagequeue,cmq)技術(shù)或者亞馬遜簡(jiǎn)單隊(duì)列服務(wù)(amazonsimplequeueservice,amazonsqs)技術(shù)等。cmq是分布式消息隊(duì)列服務(wù),能夠?yàn)榉植际讲渴鸬牟煌瑧?yīng)用之間或者一個(gè)應(yīng)用的不同組件之間,提供基于消息的可靠的異步通信機(jī)制。amazonsqs是一種用于分布式應(yīng)用的組件之間數(shù)據(jù)傳遞的消息隊(duì)列服務(wù)。
s202:釋放第一線程所占用的系統(tǒng)資源。
終端通過(guò)第一線程將數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中之后,可以釋放第一線程所占用的系統(tǒng)資源,以提高系統(tǒng)資源利用率。
s203:通過(guò)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
終端可以通過(guò)第二線程在任務(wù)隊(duì)列中獲取一個(gè)數(shù)據(jù),并將該數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。數(shù)據(jù)庫(kù)可以位于服務(wù)器中,也可以位于終端中,具體不受本發(fā)明實(shí)施例的限制。
可選的,終端可以通過(guò)第二線程檢測(cè)任務(wù)隊(duì)列中是否存在數(shù)據(jù),當(dāng)任務(wù)隊(duì)列中存在數(shù)據(jù)時(shí),終端可以通過(guò)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將該數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
可選的,終端通過(guò)第二線程檢測(cè)任務(wù)隊(duì)列中是否存在數(shù)據(jù),當(dāng)任務(wù)隊(duì)列中不存在數(shù)據(jù)時(shí),終端可以將第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài),并獲取第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài)的更新時(shí)間,當(dāng)從更新時(shí)間開始經(jīng)過(guò)第一預(yù)設(shè)時(shí)長(zhǎng)時(shí),將第二線程的工作狀態(tài)由休眠狀態(tài)更新為運(yùn)行狀態(tài),并執(zhí)行通過(guò)第二線程檢測(cè)任務(wù)隊(duì)列中是否存在數(shù)據(jù)的步驟。本發(fā)明實(shí)施例中第二線程按需進(jìn)入特定時(shí)長(zhǎng)的休眠進(jìn)程,可節(jié)省系統(tǒng)資源。其中,第一預(yù)設(shè)時(shí)長(zhǎng)可以為預(yù)先限定的時(shí)間段,例如1秒s或者3s等。
可選的,終端可以通過(guò)第二線程獲取最近一次從任務(wù)隊(duì)列中獲取數(shù)據(jù)的獲取時(shí)間,當(dāng)從獲取時(shí)間開始經(jīng)過(guò)第二預(yù)設(shè)時(shí)長(zhǎng)時(shí),終端可以通過(guò)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。其中,第二預(yù)設(shè)時(shí)長(zhǎng)可以為預(yù)先限定的時(shí)間段,例如1毫秒ms或者1s等。
可選的,若數(shù)據(jù)庫(kù)包括多個(gè),則終端運(yùn)行有多個(gè)第二線程,第二線程與數(shù)據(jù)庫(kù)對(duì)應(yīng),終端可以通過(guò)各個(gè)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到第二線程對(duì)應(yīng)的數(shù)據(jù)庫(kù)中。例如存在該第二線程對(duì)應(yīng)的三個(gè)數(shù)據(jù)庫(kù),分別為第一數(shù)據(jù)庫(kù)、第二數(shù)據(jù)庫(kù)以及第三數(shù)據(jù)庫(kù)。
本發(fā)明實(shí)施例中,通過(guò)第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中,進(jìn)而釋放第一線程所占用的系統(tǒng)資源,通過(guò)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,可以提高系統(tǒng)資源利用率,并提升第一線程獲取數(shù)據(jù)的數(shù)據(jù)獲取效率。
基于圖1所示的數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖,請(qǐng)參見(jiàn)圖3,圖3是本發(fā)明實(shí)施例的另一種數(shù)據(jù)處理方法的流程示意圖,本發(fā)明實(shí)施例的所述方法可以在各種終端中執(zhí)行,所述終端運(yùn)行有第一線程和第二線程。具體的,本發(fā)明實(shí)施例的所述方法包括如下步驟。
s301:終端啟動(dòng)第二線程。
s302:終端通過(guò)第二線程檢測(cè)任務(wù)隊(duì)列中是否存在數(shù)據(jù)。
s303:終端通過(guò)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù)。
具體實(shí)現(xiàn)中,當(dāng)終端通過(guò)第二線程檢測(cè)任務(wù)隊(duì)列中存在數(shù)據(jù)時(shí),終端可以通過(guò)第二線程在任務(wù)隊(duì)列中獲取一個(gè)數(shù)據(jù)。
s304:終端通過(guò)第二線程將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
s305:終端將第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài)。
具體實(shí)現(xiàn)中,當(dāng)終端通過(guò)第二線程檢測(cè)任務(wù)隊(duì)列中不存在數(shù)據(jù)時(shí),終端可以將第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài)。
s306:終端獲取第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài)的更新時(shí)間。
例如,終端在2017年4月14日15:00將第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài),則終端可以獲取到第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài)的更新時(shí)間為2017年4月14日15:00。
s307:當(dāng)從更新時(shí)間開始經(jīng)過(guò)第一預(yù)設(shè)時(shí)長(zhǎng)時(shí),終端將第二線程的工作狀態(tài)由休眠狀態(tài)更新為運(yùn)行狀態(tài)。
第一預(yù)設(shè)時(shí)長(zhǎng)可以為預(yù)先設(shè)定的時(shí)間段,例如1s或者3s等。以第一預(yù)設(shè)時(shí)長(zhǎng)為3s為例,若更新時(shí)間為2017年4月14日15:00,則從該更新時(shí)間開始經(jīng)過(guò)第一預(yù)設(shè)時(shí)長(zhǎng)的時(shí)間為2017年4月14日15:03,即到達(dá)2017年4月14日15:03時(shí),終端可以將第二線程的工作狀態(tài)由休眠狀態(tài)更新為運(yùn)行狀態(tài)。
本發(fā)明實(shí)施例中終端通過(guò)第二線程檢測(cè)任務(wù)隊(duì)列中存在數(shù)據(jù)時(shí),可以通過(guò)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中;終端通過(guò)第二線程檢測(cè)任務(wù)隊(duì)列中不存在數(shù)據(jù)時(shí),可以將第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài),獲取第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài)的更新時(shí)間,當(dāng)從更新時(shí)間開始經(jīng)過(guò)第一預(yù)設(shè)時(shí)長(zhǎng)時(shí),將第二線程的工作狀態(tài)由休眠狀態(tài)更新為運(yùn)行狀態(tài),觸發(fā)通過(guò)第二線程檢測(cè)任務(wù)隊(duì)列中是否存在數(shù)據(jù),可節(jié)省系統(tǒng)資源。
再請(qǐng)參見(jiàn)圖4,圖4是本發(fā)明實(shí)施例的一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖,本發(fā)明實(shí)施例的所述裝置可以設(shè)置在各種終端中,終端運(yùn)行有第一線程和第二線程,具體的,所述裝置包括如下結(jié)構(gòu)。
數(shù)據(jù)獲取單元401,用于通過(guò)所述第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中。
資源釋放單元402,用于釋放所述第一線程所占用的系統(tǒng)資源,所述系統(tǒng)資源包括cpu資源、內(nèi)存資源或者i/o資源。
數(shù)據(jù)存儲(chǔ)單元403,用于通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
可選的,所述終端運(yùn)行有至少一個(gè)第一線程,則所述數(shù)據(jù)獲取單元401,具體用于:
通過(guò)所述至少一個(gè)第一線程分別獲取需要存儲(chǔ)的數(shù)據(jù)。
通過(guò)各個(gè)所述第一線程將獲取到的數(shù)據(jù)并行存儲(chǔ)到所述任務(wù)隊(duì)列中。
可選的,所述數(shù)據(jù)處理裝置還可以包括:
檢測(cè)單元404,用于所述數(shù)據(jù)存儲(chǔ)單元403通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù)之前,通過(guò)所述第二線程檢測(cè)所述任務(wù)隊(duì)列中是否存在數(shù)據(jù)。
所述數(shù)據(jù)存儲(chǔ)單元403,還用于當(dāng)所述任務(wù)隊(duì)列中存在數(shù)據(jù)時(shí),通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù)。
可選的,所述數(shù)據(jù)處理裝置還可以包括:
狀態(tài)更新單元405,用于在所述檢測(cè)單元404通過(guò)所述第二線程檢測(cè)到所述任務(wù)隊(duì)列中不存在數(shù)據(jù)時(shí),將所述第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài)。
時(shí)間獲取單元406,用于獲取所述第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài)的更新時(shí)間。
所述狀態(tài)更新單元405,還用于當(dāng)從所述更新時(shí)間開始經(jīng)過(guò)第一預(yù)設(shè)時(shí)長(zhǎng)時(shí),將所述第二線程的工作狀態(tài)由休眠狀態(tài)更新為運(yùn)行狀態(tài),以觸發(fā)所述檢測(cè)單元404通過(guò)所述第二線程檢測(cè)所述任務(wù)隊(duì)列中是否存在數(shù)據(jù)。
可選的,所述數(shù)據(jù)處理裝置還可以包括:
時(shí)間獲取單元406,用于所述數(shù)據(jù)存儲(chǔ)單元403通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù)之前,通過(guò)所述第二線程獲取最近一次從所述任務(wù)隊(duì)列中獲取數(shù)據(jù)的獲取時(shí)間。
所述數(shù)據(jù)存儲(chǔ)單元403,還用于當(dāng)從所述獲取時(shí)間開始經(jīng)過(guò)第二預(yù)設(shè)時(shí)長(zhǎng)時(shí),通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù)。
可選的,所述數(shù)據(jù)庫(kù)可以包括多個(gè),則所述終端運(yùn)行有多個(gè)第二線程,所述第二線程與所述數(shù)據(jù)庫(kù)對(duì)應(yīng),可以一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)第二線程,也可以多個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)第二線程,也可以一個(gè)數(shù)據(jù)對(duì)應(yīng)多個(gè)第二線程。
進(jìn)一步的,所述數(shù)據(jù)存儲(chǔ)單元403,具體用于通過(guò)各個(gè)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到所述第二線程對(duì)應(yīng)的數(shù)據(jù)庫(kù)中。
本發(fā)明實(shí)施例所述裝置的各個(gè)單元的具體實(shí)現(xiàn)可參考上述方法項(xiàng)實(shí)施例中,相關(guān)步驟的具體實(shí)現(xiàn)。
本發(fā)明實(shí)施例中,數(shù)據(jù)獲取單元401通過(guò)第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中,資源釋放單元402釋放第一線程所占用的系統(tǒng)資源,數(shù)據(jù)存儲(chǔ)單元403通過(guò)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,可以提高系統(tǒng)資源利用率,并提升第一線程獲取數(shù)據(jù)的數(shù)據(jù)獲取效率。
再請(qǐng)參見(jiàn)圖5,是本發(fā)明實(shí)施例提供了一種終端的結(jié)構(gòu)示意圖,該終端的內(nèi)部結(jié)構(gòu)可包括但不限于:處理器501、網(wǎng)絡(luò)接口502及存儲(chǔ)器503。存儲(chǔ)器503包括第一線程5031、任務(wù)隊(duì)列5032以及第二線程5033。其中,終端內(nèi)的處理器501、網(wǎng)絡(luò)接口502及存儲(chǔ)器503可通過(guò)總線504或其他方式連接,在本發(fā)明實(shí)施例所示圖5中以通過(guò)總線504連接為例。
其中,處理器501(或稱cpu)是終端的計(jì)算核心以及控制核心,其可以處理終端的各類數(shù)據(jù),例如:cpu可以控制第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中;再如:cpu可以釋放第一線程所占用的系統(tǒng)資源;再如cpu可以通過(guò)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中等等。存儲(chǔ)器503(memory)是終端中的記憶設(shè)備,用于存放程序和數(shù)據(jù)。可以理解的是,此處的存儲(chǔ)器504既可以包括終端的內(nèi)置存儲(chǔ)器,當(dāng)然也可以包括終端所支持的擴(kuò)展存儲(chǔ)器。存儲(chǔ)器503提供存儲(chǔ)空間,該存儲(chǔ)空間存儲(chǔ)了終端的操作系統(tǒng)。本發(fā)明實(shí)施例中,存儲(chǔ)器503的存儲(chǔ)空間還存儲(chǔ)了第一線程、第二線程以及任務(wù)隊(duì)列。終端的處理器501通過(guò)運(yùn)行存儲(chǔ)器503中的關(guān)于數(shù)據(jù)處理的應(yīng)用程序來(lái)執(zhí)行上述圖2-3所示方法流程的相應(yīng)步驟。
具體的,所述處理器501,調(diào)用存儲(chǔ)器504中存儲(chǔ)的關(guān)于數(shù)據(jù)處理的應(yīng)用程序,用于通過(guò)第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中;釋放第一線程所占用的系統(tǒng)資源,系統(tǒng)資源包括cpu資源、內(nèi)存資源或者i/o資源;通過(guò)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
進(jìn)一步可選地,所述終端運(yùn)行有至少一個(gè)第一線程,則處理器501通過(guò)所述第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中,具體可以為:通過(guò)所述至少一個(gè)第一線程分別獲取需要存儲(chǔ)的數(shù)據(jù);通過(guò)各個(gè)所述第一線程將獲取到的數(shù)據(jù)并行存儲(chǔ)到所述任務(wù)隊(duì)列中。
進(jìn)一步可選地,所述處理器501通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù)之前,還可以執(zhí)行以下操作:通過(guò)所述第二線程檢測(cè)所述任務(wù)隊(duì)列中是否存在數(shù)據(jù);當(dāng)所述任務(wù)隊(duì)列中存在數(shù)據(jù)時(shí),通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù)。
進(jìn)一步可選地,所述處理器501通過(guò)所述第二線程檢測(cè)所述任務(wù)隊(duì)列中是否存在數(shù)據(jù)之后,還可以執(zhí)行以下操作:當(dāng)所述任務(wù)隊(duì)列中不存在數(shù)據(jù)時(shí),將所述第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài);獲取所述第二線程的工作狀態(tài)由運(yùn)行狀態(tài)更新為休眠狀態(tài)的更新時(shí)間;當(dāng)從所述更新時(shí)間開始經(jīng)過(guò)第一預(yù)設(shè)時(shí)長(zhǎng)時(shí),將所述第二線程的工作狀態(tài)由休眠狀態(tài)更新為運(yùn)行狀態(tài),并執(zhí)行通過(guò)所述第二線程檢測(cè)所述任務(wù)隊(duì)列中是否存在數(shù)據(jù)的步驟。
進(jìn)一步可選地,所述處理器501通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù)之前,還可以執(zhí)行以下操作:通過(guò)所述第二線程獲取最近一次從所述任務(wù)隊(duì)列中獲取數(shù)據(jù)的獲取時(shí)間;當(dāng)從所述獲取時(shí)間開始經(jīng)過(guò)第二預(yù)設(shè)時(shí)長(zhǎng)時(shí),通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù)。
進(jìn)一步可選地,所述數(shù)據(jù)庫(kù)包括多個(gè),則所述終端運(yùn)行有多個(gè)第二線程,第二線程與所述數(shù)據(jù)庫(kù)對(duì)應(yīng),所述處理器501通過(guò)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,具體可以為:通過(guò)各個(gè)所述第二線程在所述任務(wù)隊(duì)列中獲取所述數(shù)據(jù),并將所述數(shù)據(jù)存儲(chǔ)到第二線程對(duì)應(yīng)的數(shù)據(jù)庫(kù)中。
本發(fā)明實(shí)施例的所述處理器501的具體實(shí)現(xiàn)可參考上述方法項(xiàng)實(shí)施例中相關(guān)步驟的具體描述。
本發(fā)明實(shí)施例可以通過(guò)第一線程獲取需要存儲(chǔ)的數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到任務(wù)隊(duì)列中,釋放第一線程所占用的系統(tǒng)資源,通過(guò)第二線程在任務(wù)隊(duì)列中獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,提高系統(tǒng)資源利用率,并提升第一線程獲取數(shù)據(jù)的數(shù)據(jù)獲取效率。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(read-onlymemory,rom)或隨機(jī)存儲(chǔ)記憶體(randomaccessmemory,ram)等。
以上所揭露的僅為本發(fā)明一種部分實(shí)施例而已,當(dāng)然不能以此來(lái)限定本發(fā)明之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。