多線程報(bào)告下載方法和裝置制造方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種多線程報(bào)告下載方法和裝置。所述方法包括:在第一階段線程中,向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,以指示所述服務(wù)器處理待下載的報(bào)告;在第一階段線程中,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),釋放所述第一階段線程;如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求;在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢,則從所述服務(wù)器下載所述報(bào)告。本發(fā)明大大減少了客戶端在下載報(bào)告過(guò)程中的空等待時(shí)間,提高了線程資源的利用率,也提高了多線程下載資源的速度。
【專(zhuān)利說(shuō)明】多線程報(bào)告下載方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實(shí)施例涉及計(jì)算機(jī)數(shù)據(jù)處理技術(shù),尤其涉及一種多線程報(bào)告下載方法和裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的迅速發(fā)展,數(shù)據(jù)的存儲(chǔ)逐漸從終端向云端進(jìn)行轉(zhuǎn)移。博客、相冊(cè)、網(wǎng)盤(pán)、大容量郵箱等業(yè)務(wù)的發(fā)展使得在云端存儲(chǔ)的用戶數(shù)據(jù)規(guī)模越來(lái)越大。一般來(lái)說(shuō),終端用戶可以通過(guò)API (Application Programming Interface,應(yīng)用編程接口)接口來(lái)管理云端服務(wù)器(API服務(wù)器)中的云資源。
[0003]在現(xiàn)有技術(shù)中,當(dāng)對(duì)應(yīng)于多個(gè)賬戶或設(shè)備的多個(gè)客戶端需要同時(shí)對(duì)API服務(wù)器中存儲(chǔ)的多個(gè)資源進(jìn)行下載時(shí),例如下載報(bào)告,則每個(gè)客戶端需要和API服務(wù)器進(jìn)行一次整體的交互才能將所需的報(bào)告下載下來(lái)。在整體的交互過(guò)程中包含了如下的邏輯步驟:
[0004]申請(qǐng)占用一個(gè)線程資源,在此線程發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求到API服務(wù)器并獲得一個(gè)唯一報(bào)告ID (Identity,身份標(biāo)識(shí)號(hào)碼);
[0005]通過(guò)唯一報(bào)告ID再次向API服務(wù)器發(fā)出報(bào)告狀態(tài)查詢請(qǐng)求;
[0006]如果API服務(wù)器返回的報(bào)告狀態(tài)為正在處理,則等待一定時(shí)間,然后重新向API服務(wù)器發(fā)出報(bào)告狀態(tài)查詢請(qǐng)求;如果API服務(wù)器返回的報(bào)告狀態(tài)為處理完畢,則下載相應(yīng)的?艮告。
[0007]不同的客戶端或不同的下載請(qǐng)求均需要占用一個(gè)線程來(lái)完成下載過(guò)程。
[0008]現(xiàn)有技術(shù)存在的主要缺陷是,API服務(wù)器處理報(bào)告需要一定的時(shí)間,當(dāng)一個(gè)客戶端通過(guò)唯一報(bào)告ID向API服務(wù)器發(fā)出報(bào)告狀態(tài)查詢請(qǐng)求時(shí),API服務(wù)器可能并沒(méi)有完成對(duì)該報(bào)告的處理過(guò)程,因此每個(gè)客戶端都要等待一定的時(shí)間才能從API服務(wù)器上下載相應(yīng)的報(bào)告,所以當(dāng)多個(gè)客戶端需要同時(shí)對(duì)API服務(wù)器中存儲(chǔ)的多個(gè)報(bào)告進(jìn)行下載時(shí),由于線程數(shù)量有限,所以往往導(dǎo)致下載極為緩慢。
【發(fā)明內(nèi)容】
[0009]有鑒于此,本發(fā)明提供一種多線程報(bào)告下載方法和裝置,以提高多客戶端占用多線程下載資源的速度。
[0010]第一方面,本發(fā)明實(shí)施例提供了一種多線程報(bào)告下載方法,包括:
[0011]在第一階段線程中,向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,以指示所述服務(wù)器處理待下載的報(bào)告;
[0012]在第一階段線程中,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),釋放所述第一階段線程;
[0013]如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求;
[0014]在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢,則從所述服務(wù)器下載所述報(bào)告。
[0015]第二方面,本發(fā)明實(shí)施例提供了一種多線程報(bào)告下載裝置,包括:
[0016]下載請(qǐng)求發(fā)送單元,用于在第一階段線程中,向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,以指示所述服務(wù)器處理待下載的報(bào)告;
[0017]報(bào)告標(biāo)識(shí)接收單元,用于在第一階段線程中,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),釋放所述第一階段線程;
[0018]查詢請(qǐng)求發(fā)送單元,用于如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求;
[0019]報(bào)告下載單元,用于在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢,則從所述服務(wù)器下載所述報(bào)告。
[0020]本發(fā)明實(shí)施例將各客戶端的報(bào)告下載線程分為兩個(gè)階段線程進(jìn)行異步處理,在第一階段線程中,客戶端僅向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),不會(huì)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,在第一階段線程的時(shí)間內(nèi),服務(wù)器會(huì)根據(jù)下載數(shù)據(jù)報(bào)告請(qǐng)求,處理一部分的報(bào)告;在第二階段線程中,如果發(fā)生設(shè)定的等待觸發(fā)條件,客戶端根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,此時(shí),一部分報(bào)告已經(jīng)被服務(wù)器處理完成,發(fā)送該部分報(bào)告的客戶端可以直接下載報(bào)告而無(wú)需等待,大大減少了客戶端在下載報(bào)告過(guò)程中的空等待時(shí)間,提高了線程資源的利用率,也提高了多線程下載的速度。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0021]圖1是本發(fā)明第一實(shí)施例的一種多線程報(bào)告下載方法的流程圖;
[0022]圖2是本發(fā)明第二實(shí)施例的一種多線程報(bào)告下載方法的流程圖;
[0023]圖3是本發(fā)明第三實(shí)施例的一種多線程報(bào)告下載裝置的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0024]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明??梢岳斫獾氖牵颂幩枋龅木唧w實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說(shuō)明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
[0025]第一實(shí)施例
[0026]圖1為本發(fā)明第一實(shí)施例提供的一種多線程報(bào)告下載方法的流程圖,本實(shí)施例的方法可以由多線程報(bào)告下載裝置來(lái)執(zhí)行,該裝置可通過(guò)硬件和/或軟件的方式實(shí)現(xiàn),一般可以集成于API請(qǐng)求方中。API請(qǐng)求方通常提供有設(shè)定數(shù)量的線程資源,構(gòu)成線程池,可供不同的客戶端占用。API請(qǐng)求方通過(guò)網(wǎng)絡(luò)與API服務(wù)方一起交互配合,進(jìn)行報(bào)告下載。典型的,API請(qǐng)求方為終端設(shè)備,API服務(wù)方為服務(wù)器。本實(shí)施例的方法具體包括如下步驟:
[0027]步驟110、在第一階段線程中,向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,以指示所述服務(wù)器處理待下載的報(bào)告。
[0028]在本實(shí)施例中,第一階段線程是任意一個(gè)線程,由某客戶端申請(qǐng)占用,客戶端向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,以指示所述服務(wù)器處理待下載的報(bào)告。當(dāng)服務(wù)器接收到下載數(shù)據(jù)報(bào)告請(qǐng)求后,開(kāi)始處理相應(yīng)的待下載報(bào)告。[0029]在本實(shí)施例中,上述待下載報(bào)告可以為圖形、數(shù)字報(bào)表文件也可以為其他類(lèi)型的資源文件,對(duì)此并不限定。典型的,上述待下載報(bào)告為服務(wù)器需要進(jìn)行大量計(jì)算,消耗大量時(shí)間生成的數(shù)據(jù)報(bào)告。
[0030]其中,服務(wù)器對(duì)待下載報(bào)告的處理過(guò)程可以包括:根據(jù)下載數(shù)據(jù)報(bào)告請(qǐng)求中的關(guān)鍵詞,例如:時(shí)間區(qū)間、報(bào)告類(lèi)型、限定條件模板類(lèi)型等,對(duì)自身存儲(chǔ)的數(shù)據(jù)進(jìn)行處理,生成特定的數(shù)據(jù)報(bào)告,舉例而言:下載數(shù)據(jù)報(bào)告請(qǐng)求中請(qǐng)求下載2006年7月某網(wǎng)站的流量明細(xì)報(bào)告,服務(wù)器根據(jù)該請(qǐng)求對(duì)存儲(chǔ)的數(shù)據(jù)進(jìn)行篩選,按照預(yù)定的計(jì)算公式,自動(dòng)計(jì)算得到與該請(qǐng)求相適應(yīng)的數(shù)據(jù)報(bào)告。
[0031]在本實(shí)施例中,與下載數(shù)據(jù)報(bào)告請(qǐng)求對(duì)應(yīng)的報(bào)告可以為一個(gè)或者多個(gè),對(duì)此并不限定。
[0032]其中,當(dāng)服務(wù)器根據(jù)下載數(shù)據(jù)報(bào)告請(qǐng)求生成相應(yīng)的數(shù)據(jù)報(bào)告時(shí),需要對(duì)相應(yīng)的數(shù)據(jù)進(jìn)行篩選處理和計(jì)算,因此,需要占用CPU的資源并且消耗一定的時(shí)間,此時(shí),如果同一客戶端向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求時(shí),會(huì)有空等待的情況發(fā)生。
[0033]步驟120、在第一階段線程中,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),釋放所述第一階段線程。
[0034]在本實(shí)施例中,在第一階段線程中,客戶端接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),而后即結(jié)束所述第一階段線程。
[0035]其中,當(dāng)服務(wù)器接收到下載數(shù)據(jù)報(bào)告的請(qǐng)求后,會(huì)向與該下載數(shù)據(jù)報(bào)告請(qǐng)求對(duì)應(yīng)的客戶端發(fā)送一個(gè)唯一的報(bào)告標(biāo)識(shí),客戶端可以根據(jù)上述報(bào)告標(biāo)識(shí)向服務(wù)器查詢與該報(bào)告標(biāo)識(shí)對(duì)應(yīng)的報(bào)告的處理狀態(tài)。
[0036]當(dāng)一個(gè)客戶端接收到服務(wù)器返回的報(bào)告標(biāo)識(shí)后,會(huì)釋放掉第一階段線程,將該線程的使用權(quán)交給其他的客戶端使用。
[0037]可以理解的是,當(dāng)一個(gè)客戶端接收到服務(wù)器返回的報(bào)告標(biāo)識(shí)后,如果該線程繼續(xù)處于等待狀態(tài)不結(jié)束時(shí),線程池內(nèi)將無(wú)法啟動(dòng)新線程。這時(shí)等待的線程繼續(xù)占用資源但不進(jìn)行計(jì)算,從而造成計(jì)算資源的浪費(fèi)。因此,在本實(shí)施例中,當(dāng)一個(gè)客戶端接收到服務(wù)器返回的報(bào)告標(biāo)識(shí)后,線程結(jié)束,同時(shí)釋放掉該線程使用的硬件資源,例如CPU、內(nèi)存和IO帶寬等,將該線程的使用權(quán)交給其他的線程使用,可以盡可能的減少該線程以等待方式占用資源,進(jìn)而提高資源的利用率。
[0038]舉例而言,終端設(shè)備共包括5個(gè)并行線程,可以以并行的方式進(jìn)行相應(yīng)的數(shù)據(jù)處理,在一段預(yù)定的時(shí)間內(nèi),100個(gè)并發(fā)請(qǐng)求通過(guò)大小為5的線程池向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,終端設(shè)備首先將該收到的下載數(shù)據(jù)報(bào)告請(qǐng)求進(jìn)行緩存,將其中的5個(gè)下載數(shù)據(jù)報(bào)告請(qǐng)求(典型的,最先接收的5個(gè)下載數(shù)據(jù)報(bào)告請(qǐng)求)向服務(wù)器發(fā)送,并接收返回的報(bào)告標(biāo)識(shí),當(dāng)一個(gè)客戶端收到對(duì)應(yīng)的報(bào)告標(biāo)識(shí)后,釋放占用的線程,使得終端設(shè)備可以處理其他客戶端的下載數(shù)據(jù)報(bào)告請(qǐng)求。
[0039]步驟130、判斷是否發(fā)生設(shè)定的等待觸發(fā)條件,若是,執(zhí)行步驟140 ;否則,返回步驟 130。
[0040]在本實(shí)施例中,為了防止客戶端在收到報(bào)告標(biāo)識(shí)后,直接向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢時(shí),產(chǎn)生的空等待時(shí)間,首先需要判斷是否滿足設(shè)定的等待觸發(fā)條件,若是,才會(huì)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢。[0041]在本實(shí)施例中,所述判斷是否滿足設(shè)定的等待觸發(fā)條件可以為:
[0042]判斷服務(wù)器是否將預(yù)定時(shí)間間隔內(nèi)接收到的全部下載數(shù)據(jù)報(bào)告請(qǐng)求處理完成,或者;
[0043]判斷服務(wù)器是否將預(yù)定時(shí)間間隔內(nèi)接收到的預(yù)定個(gè)數(shù)的下載數(shù)據(jù)報(bào)告請(qǐng)求處理完成,或者
[0044]判斷自身發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求后的設(shè)定等待時(shí)間是否到達(dá)等,對(duì)此并不限定。
[0045]服務(wù)器是否將下載數(shù)據(jù)報(bào)告請(qǐng)求處理完成,可通過(guò)判斷是否所有緩存的或設(shè)定個(gè)數(shù)的下載數(shù)據(jù)報(bào)告請(qǐng)求均接收到了對(duì)應(yīng)的報(bào)告標(biāo)識(shí)來(lái)確定。預(yù)定時(shí)間間隔、預(yù)定個(gè)數(shù)和設(shè)定等待時(shí)間均可根據(jù)經(jīng)驗(yàn)設(shè)定,既能夠避免空等待,也能盡量及時(shí)的下載報(bào)告。
[0046]步驟140、在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
[0047]在本實(shí)施例中,當(dāng)判斷滿足設(shè)定的等待觸發(fā)條件后,客戶端根據(jù)接收到的報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。其中,所述報(bào)告狀態(tài)查詢請(qǐng)求用于查詢與報(bào)告標(biāo)識(shí)對(duì)應(yīng)的報(bào)告是否被處理完畢,典型的,是否已經(jīng)被讀入服務(wù)器的內(nèi)存緩沖區(qū)中等。服務(wù)器可以對(duì)處理完畢的報(bào)告返回相應(yīng)的報(bào)告狀態(tài),對(duì)未處理完畢的報(bào)告不返回相應(yīng)的報(bào)告狀態(tài);月艮務(wù)器也可以根據(jù)報(bào)告狀態(tài)查詢請(qǐng)求返回不同的報(bào)告狀態(tài),其中,所述報(bào)告狀態(tài)可以包括:處理完畢、處理中和出錯(cuò)等,對(duì)此并不限定。
[0048]步驟150、在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢,則從所述服務(wù)器下載所述報(bào)告。
[0049]在本實(shí)施例中,如果客戶端接收到所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢,客戶端將直接從服務(wù)器下載所述報(bào)告。
[0050]在本實(shí)施例的一個(gè)優(yōu)選的實(shí)施方式中,在所述第二階段線程中,如果所述客戶端接收到所述服務(wù)器返回報(bào)告狀態(tài)為正在處理,則等待設(shè)定時(shí)長(zhǎng),重復(fù)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,直至所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢。作為示例而非限定,可以將等待時(shí)長(zhǎng)設(shè)置為5s、IOs或者15s等,對(duì)此并不限定。
[0051]本發(fā)明實(shí)施例將各客戶端的報(bào)告下載線程分為兩個(gè)階段線程進(jìn)行異步處理,在第一階段線程中,客戶端僅向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),不會(huì)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,在第一階段線程的時(shí)間內(nèi),服務(wù)器會(huì)根據(jù)下載數(shù)據(jù)報(bào)告請(qǐng)求,處理一部分的報(bào)告;在第二階段線程中,如果發(fā)生設(shè)定的等待觸發(fā)條件,客戶端根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,此時(shí),一部分報(bào)告已經(jīng)被服務(wù)器處理完成,發(fā)送該部分報(bào)告的客戶端可以直接下載報(bào)告而無(wú)需等待,大大減少了客戶端在下載報(bào)告過(guò)程中的空等待時(shí)間,提高了線程資源的利用率,也提高了多線程下載的速度。
[0052]第二實(shí)施例
[0053]圖2為本發(fā)明第二實(shí)施例的一種多線程下載方法的流程圖,本實(shí)施例以上述實(shí)施例為基礎(chǔ)進(jìn)行優(yōu)化,在本實(shí)施例中,優(yōu)選的將步驟:如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求優(yōu)化為:在監(jiān)測(cè)到設(shè)定數(shù)量的下載數(shù)據(jù)報(bào)告請(qǐng)求處理完成后,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求;如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,按照各下載數(shù)據(jù)報(bào)告請(qǐng)求的發(fā)送順序,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器順序發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
[0054]相應(yīng)地,本實(shí)施例的方法具體包括如下步驟:
[0055]步驟210、在第一階段線程中,向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,以指示服務(wù)器處理待下載的報(bào)告。
[0056]步驟220、在第一階段線程中,接收服務(wù)器根據(jù)下載數(shù)據(jù)報(bào)告請(qǐng)求返回的報(bào)告的報(bào)告標(biāo)識(shí),釋放第一階段線程。
[0057]步驟230、判斷是否監(jiān)測(cè)到設(shè)定數(shù)量的下載數(shù)據(jù)報(bào)告請(qǐng)求處理完成:若是,執(zhí)行步驟240 ;否則,返回步驟230。
[0058]在本實(shí)施例中,服務(wù)器可以每收到一個(gè)數(shù)據(jù)報(bào)告請(qǐng)求就進(jìn)行相應(yīng)的處理,也可以當(dāng)收到預(yù)定多個(gè)數(shù)據(jù)報(bào)告請(qǐng)求后統(tǒng)一集中處理。
[0059]舉例而言,當(dāng)服務(wù)器收到1000個(gè)下載數(shù)據(jù)報(bào)告請(qǐng)求后,開(kāi)始對(duì)該1000個(gè)請(qǐng)求集中處理,返回相應(yīng)的報(bào)告標(biāo)識(shí),對(duì)與報(bào)告標(biāo)識(shí)對(duì)應(yīng)的報(bào)告進(jìn)行處理,其中,當(dāng)服務(wù)器處理了預(yù)定多個(gè)報(bào)告后,會(huì)向各客戶端發(fā)送一個(gè)消息,指示各客戶端可以開(kāi)始發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
[0060]步驟240、判斷是否到達(dá)發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求的時(shí)機(jī):若是,執(zhí)行步驟250 ;否貝丨J,返回步驟240。
[0061]在本實(shí)施例中,在第二階段線程中,各客戶端按照各下載數(shù)據(jù)報(bào)告請(qǐng)求的發(fā)送順序,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器順序發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
[0062]在本實(shí)施例中,服務(wù)器按照接收到下載數(shù)據(jù)報(bào)告請(qǐng)求的順序,對(duì)相應(yīng)的報(bào)告進(jìn)行處理,也就是說(shuō),最先發(fā)送數(shù)據(jù)報(bào)告請(qǐng)求的客戶端對(duì)應(yīng)的報(bào)告最先被處理完畢。
[0063]舉例而言,客戶端1、客戶端2和客戶端3按照順序向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,當(dāng)服務(wù)器處理了一定數(shù)量的報(bào)告后,會(huì)依次向客戶端1、客戶端2和客戶端3發(fā)送觸發(fā)報(bào)文,指示客戶端1、客戶端2和客戶端3順序發(fā)送報(bào)告查詢請(qǐng)求。
[0064]步驟250、在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
[0065]步驟260、在第二階段線程中,如果服務(wù)器返回報(bào)告狀態(tài)為處理完畢,則從服務(wù)器下載所述報(bào)告。
[0066]本發(fā)明實(shí)施例將各客戶端的報(bào)告下載線程分為兩個(gè)階段線程進(jìn)行異步處理,在第一階段線程中,客戶端僅向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),不會(huì)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,在第一階段線程的時(shí)間內(nèi),服務(wù)器會(huì)根據(jù)下載數(shù)據(jù)報(bào)告請(qǐng)求,處理一部分的報(bào)告;在第二階段線程中,如果發(fā)生設(shè)定的等待觸發(fā)條件,客戶端根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,此時(shí),一部分報(bào)告已經(jīng)被服務(wù)器處理完成,發(fā)送該部分報(bào)告的客戶端可以直接下載報(bào)告而無(wú)需等待,大大減少了客戶端在下載報(bào)告過(guò)程中的空等待時(shí)間,提高了多線程資源的利用率和下載速度。
[0067]在上述各實(shí)施例的基礎(chǔ)上,優(yōu)選是將步驟:如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求進(jìn)一步優(yōu)化為:在發(fā)送所述下載數(shù)據(jù)報(bào)告請(qǐng)求后的設(shè)定等待時(shí)間到達(dá)時(shí),則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。這樣設(shè)置的好處是客戶端不需要與服務(wù)器再進(jìn)行交互以確定發(fā)送報(bào)告查詢請(qǐng)求的時(shí)機(jī),僅僅根據(jù)時(shí)間經(jīng)驗(yàn)常數(shù)設(shè)定定時(shí)器,當(dāng)滿足計(jì)時(shí)要求時(shí),就會(huì)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,進(jìn)一步簡(jiǎn)化了實(shí)現(xiàn)方法。
[0068]在上述各實(shí)施例的基礎(chǔ)上,優(yōu)選是將步驟:在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢,則從所述服務(wù)器下載所述報(bào)告進(jìn)一步優(yōu)化為:在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為正在處理,則等待設(shè)定時(shí)長(zhǎng),重復(fù)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,直至所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢;根據(jù)所述報(bào)告標(biāo)識(shí)獲取報(bào)告對(duì)應(yīng)的文件標(biāo)識(shí);根據(jù)所述文件標(biāo)識(shí)從所述服務(wù)器進(jìn)行報(bào)告下載。
[0069]在一個(gè)例子中,比較現(xiàn)有技術(shù)的報(bào)告下載方法和本發(fā)明第一實(shí)施例的報(bào)告下載方法中的服務(wù)器處理時(shí)間。
[0070]例如:每個(gè)客戶端下載每個(gè)報(bào)告需要一個(gè)線程來(lái)完成,由于網(wǎng)絡(luò)帶寬限制,下載的線程池的容量為10,線程池關(guān)聯(lián)到一個(gè)阻塞隊(duì)列,現(xiàn)在有1000個(gè)客戶端需要下載5種類(lèi)型的消費(fèi)報(bào)告。
[0071]現(xiàn)有技術(shù)中,報(bào)告下載方法包括如下兩個(gè)步驟:
[0072]步驟1、發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求到API服務(wù)器并獲得一個(gè)唯一報(bào)告ID ;
[0073]步驟2、通過(guò)唯一報(bào)告ID再次向API服務(wù)器發(fā)出報(bào)告狀態(tài)查詢請(qǐng)求如果API服務(wù)器返回的報(bào)告狀態(tài)為正在處理,則等待一定時(shí)間,然后重新向API服務(wù)器發(fā)出報(bào)告狀態(tài)查詢請(qǐng)求;如果API服務(wù)器返回的報(bào)告狀態(tài)為處理完畢,則下載相應(yīng)的報(bào)告。
[0074]使用現(xiàn)有技術(shù)的方法,服務(wù)器的消耗時(shí)間包括:
[0075]10個(gè)客戶端同步任務(wù)啟動(dòng),在I秒完成第一步;
[0076]10個(gè)任務(wù)到達(dá)第二步處在等待狀態(tài),同時(shí)平均等待10*3秒;
[0077]4990個(gè)任務(wù)被阻塞在隊(duì)列里面;
[0078]等待完成后下載數(shù)據(jù)需要花費(fèi)平均5秒
[0079]然后線程執(zhí)行結(jié)束,其他客戶端同步任務(wù)可以進(jìn)入執(zhí)行池開(kāi)始運(yùn)行;
[0080]以此類(lèi)推,全部任務(wù)下載完成至少需要5000* (1+10*3+5)/10 = 18000秒(5個(gè)小時(shí)左右時(shí)間)。
[0081 ] 在本發(fā)明實(shí)施例中,將報(bào)告下載分為兩個(gè)階段線程,在這兩個(gè)階段線程中,服務(wù)器消耗的時(shí)間包括:
[0082]第一階段線程:
[0083]10個(gè)同步任務(wù)啟動(dòng),在I秒完成第一階段,馬上第二批10個(gè)任務(wù)進(jìn)行執(zhí)行,花費(fèi)時(shí)間也為I秒,以此類(lèi)推4980個(gè)任務(wù)依此發(fā)送到服務(wù)器完畢,總花費(fèi)時(shí)間為500秒;
[0084]第二階段線程:
[0085]因?yàn)檎?qǐng)求發(fā)送的提前性,那些首先發(fā)送的請(qǐng)求已經(jīng)被服務(wù)器提前處理,已經(jīng)直接可以下載,無(wú)需再行等待;
[0086]10個(gè)任務(wù)可以直接并行開(kāi)始下載數(shù)據(jù),平均花費(fèi)5秒;
[0087]隨著下載的進(jìn)行,后續(xù)發(fā)送的任務(wù)請(qǐng)求也被服務(wù)器進(jìn)行處理;
[0088]接下來(lái)的10個(gè)任務(wù)也無(wú)需再等待,可以直接下載;
[0089]所以5000個(gè)任務(wù)在第二階段的第5步種總共花費(fèi)時(shí)間為(5000/10)*5=2500秒,所有同步任務(wù)完成第二階段花費(fèi)時(shí)間總共為500+2500=3000秒(約I個(gè)小時(shí)左右時(shí)間),從而可以得出的優(yōu)化時(shí)間為18000/3000約6倍的時(shí)間。[0090]第三實(shí)施例
[0091]在圖3中示出了一種多線程報(bào)告下載裝置的結(jié)構(gòu)圖。如圖3所示,所述裝置包括:
[0092]下載請(qǐng)求發(fā)送單元31,用于在第一階段線程中,向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,以指示所述服務(wù)器處理待下載的報(bào)告。
[0093]報(bào)告標(biāo)識(shí)接收單元32,用于在第一階段線程中,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),釋放所述第一階段線程。
[0094]查詢請(qǐng)求發(fā)送單元33,用于如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
[0095]報(bào)告下載單元34,用于在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢,則從所述服務(wù)器下載所述報(bào)告。
[0096]本發(fā)明實(shí)施例將各客戶端的報(bào)告下載線程分為兩個(gè)階段線程進(jìn)行異步處理,在第一階段線程中,客戶端僅向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),不會(huì)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,在第一階段線程的時(shí)間內(nèi),服務(wù)器會(huì)根據(jù)下載數(shù)據(jù)報(bào)告請(qǐng)求,處理一部分的報(bào)告;在第二階段線程中,如果發(fā)生設(shè)定的等待觸發(fā)條件,客戶端根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,此時(shí),一部分報(bào)告已經(jīng)被服務(wù)器處理完成,發(fā)送該部分報(bào)告的客戶端可以直接下載報(bào)告而無(wú)需等待,大大減少了客戶端在下載報(bào)告過(guò)程中的空等待時(shí)間,提高了多線程資源的利用率和下載速度。
[0097]在上述各實(shí)施例的基礎(chǔ)上,所述查詢請(qǐng)求發(fā)送單元具體用于:
[0098]在監(jiān)測(cè)到設(shè)定數(shù)量的下載數(shù)據(jù)報(bào)告請(qǐng)求處理完成后,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
[0099]在上述各實(shí)施例的基礎(chǔ)上,所述查詢請(qǐng)求發(fā)送單元具體用于:
[0100]在發(fā)送所述下載數(shù)據(jù)報(bào)告請(qǐng)求后的設(shè)定等待時(shí)間到達(dá)時(shí),則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
[0101]在上述各實(shí)施例的基礎(chǔ)上,所述查詢請(qǐng)求發(fā)送單元具體用于:
[0102]如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,按照各下載數(shù)據(jù)報(bào)告請(qǐng)求的發(fā)送順序,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器順序發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
[0103]在上述各實(shí)施例的基礎(chǔ)上,所述報(bào)告下載單元具體用于:
[0104]在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為正在處理,則等待設(shè)定時(shí)長(zhǎng),重復(fù)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,直至所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢;
[0105]根據(jù)所述報(bào)告標(biāo)識(shí)獲取報(bào)告對(duì)應(yīng)的文件標(biāo)識(shí);
[0106]根據(jù)所述文件標(biāo)識(shí)從所述服務(wù)器進(jìn)行報(bào)告下載。
[0107]上述裝置可執(zhí)行本發(fā)明任意實(shí)施例所提供的方法,具備執(zhí)行方法相應(yīng)的功能模塊和有益效果。
[0108]注意,上述僅為本發(fā)明的較佳實(shí)施例及所運(yùn)用技術(shù)原理。本領(lǐng)域技術(shù)人員會(huì)理解,本發(fā)明不限于這里所述的特定實(shí)施例,對(duì)本領(lǐng)域技術(shù)人員來(lái)說(shuō)能夠進(jìn)行各種明顯的變化、重新調(diào)整和替代而不會(huì)脫離本發(fā)明的保護(hù)范圍。因此,雖然通過(guò)以上實(shí)施例對(duì)本發(fā)明進(jìn)行了較為詳細(xì)的說(shuō)明,但是本發(fā)明不僅僅限于以上實(shí)施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實(shí)施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。
【權(quán)利要求】
1.一種多線程報(bào)告下載方法,其特征在于,包括: 在第一階段線程中,向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,以指示所述服務(wù)器處理待下載的報(bào)告; 在第一階段線程中,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),釋放所述第一階段線程; 如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求; 在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢,則從所述服務(wù)器下載所述報(bào)告。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,包括: 在監(jiān)測(cè)到設(shè)定數(shù)量的下載數(shù)據(jù)報(bào)告請(qǐng)求處理完成后,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,包括: 在發(fā)送所述下載數(shù)據(jù)報(bào)告請(qǐng)求后的設(shè)定等待時(shí)間到達(dá)時(shí),則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
4.根據(jù)權(quán)利要求1-3任一所述的方法,其特征在于,如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求包括: 如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,按照各下載數(shù)據(jù)報(bào)告請(qǐng)求的發(fā)送順序,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器順序發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
5.根據(jù)權(quán)利要求1-3任一所述的方法,其特征在于,在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢,則從所述服務(wù)器下載所述報(bào)告包括: 在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為正在處理,則等待設(shè)定時(shí)長(zhǎng),重復(fù)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,直至所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢; 根據(jù)所述報(bào)告標(biāo)識(shí)獲取報(bào)告對(duì)應(yīng)的文件標(biāo)識(shí); 根據(jù)所述文件標(biāo)識(shí)從所述服務(wù)器進(jìn)行報(bào)告下載。
6.一種多線程報(bào)告下載裝置,其特征在于,包括: 下載請(qǐng)求發(fā)送單元,用于在第一階段線程中,向服務(wù)器發(fā)送下載數(shù)據(jù)報(bào)告請(qǐng)求,以指示所述服務(wù)器處理待下載的報(bào)告; 報(bào)告標(biāo)識(shí)接收單元,用于在第一階段線程中,接收服務(wù)器根據(jù)所述下載數(shù)據(jù)報(bào)告請(qǐng)求返回的所述報(bào)告的報(bào)告標(biāo)識(shí),釋放所述第一階段線程; 查詢請(qǐng)求發(fā)送單元,用于如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求; 報(bào)告下載單元,用于在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢,則從所述服務(wù)器下載所述報(bào)告。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述查詢請(qǐng)求發(fā)送單元具體用于: 在監(jiān)測(cè)到設(shè)定數(shù)量的下載數(shù)據(jù)報(bào)告請(qǐng)求處理完成后,則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述查詢請(qǐng)求發(fā)送單元具體用于: 在發(fā)送所述下載數(shù)據(jù)報(bào)告請(qǐng)求后的設(shè)定等待時(shí)間到達(dá)時(shí),則在第二階段線程中,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
9.根據(jù)權(quán)利要求6-8任一所述的裝置,其特征在于,所述查詢請(qǐng)求發(fā)送單元具體用于: 如果發(fā)生設(shè)定的等待觸發(fā)條件,則在第二階段線程中,按照各下載數(shù)據(jù)報(bào)告請(qǐng)求的發(fā)送順序,根據(jù)所述報(bào)告標(biāo)識(shí)向服務(wù)器順序發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求。
10.根據(jù)權(quán)利要求6-8任一所述的裝置,其特征在于,所述報(bào)告下載單元具體用于: 在所述第二階段線程中,如果所述服務(wù)器返回報(bào)告狀態(tài)為正在處理,則等待設(shè)定時(shí)長(zhǎng),重復(fù)向服務(wù)器發(fā)送報(bào)告狀態(tài)查詢請(qǐng)求,直至所述服務(wù)器返回報(bào)告狀態(tài)為處理完畢; 根據(jù)所述報(bào)告標(biāo)識(shí)獲取報(bào)告對(duì)應(yīng)的文件標(biāo)識(shí); 根據(jù)所述文件標(biāo)識(shí)從所述 服務(wù)器進(jìn)行報(bào)告下載。
【文檔編號(hào)】H04L29/08GK103647837SQ201310697624
【公開(kāi)日】2014年3月19日 申請(qǐng)日期:2013年12月18日 優(yōu)先權(quán)日:2013年12月18日
【發(fā)明者】裴向宇, 田傳釗, 何建新 申請(qǐng)人:北京博雅立方科技有限公司