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