本發(fā)明涉及搜索引擎領(lǐng)域,特別是涉及一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法及裝置。
背景技術(shù):
隨著大數(shù)據(jù)時(shí)代的到來,搜索引擎成為人們可以快速獲取信息的可靠工具而被廣泛應(yīng)用。例如,電商應(yīng)用上的商品搜索引擎就是人們經(jīng)常會(huì)用到的一種搜索引擎,當(dāng)搜索商品時(shí),系統(tǒng)通過調(diào)用搜索引擎對(duì)查詢條件執(zhí)行查詢,拿到結(jié)果后再進(jìn)行業(yè)務(wù)上的數(shù)據(jù)解析、組裝等操作進(jìn)而獲得搜索結(jié)果。
傳統(tǒng)的搜索引擎的執(zhí)行方法為同步執(zhí)行,即系統(tǒng)開啟主線程用來依次調(diào)用搜索引擎的多個(gè)接口,并每次在調(diào)用接口后阻塞該主線程,一直到所調(diào)用的接口返回?cái)?shù)據(jù)后該主線程才會(huì)由阻塞狀態(tài)恢復(fù),并獲取該返回?cái)?shù)據(jù)進(jìn)行處理,數(shù)據(jù)處理結(jié)束后該線程繼續(xù)調(diào)用下一接口,直至所有需要調(diào)用的接口均被調(diào)用后,進(jìn)行繼續(xù)執(zhí)行后續(xù)數(shù)據(jù)組裝的步驟。圖1為現(xiàn)有技術(shù)提供的一種搜索引擎的執(zhí)行方法為同步執(zhí)行的原理圖。如圖1所示,系統(tǒng)開啟主線程用來調(diào)用接口a,在調(diào)用后主線程阻塞,一直到所調(diào)用的接口返回?cái)?shù)據(jù)后,主線程從阻塞狀態(tài)恢復(fù)并獲取該返回?cái)?shù)據(jù)進(jìn)行處理,處理結(jié)束后該主線程繼續(xù)調(diào)用接口b,并以同樣的步驟繼續(xù)進(jìn)行直至所有需調(diào)用的接口均被調(diào)用。由此可見,當(dāng)系統(tǒng)的qps(每秒查詢次數(shù))很高時(shí),會(huì)導(dǎo)致系統(tǒng)負(fù)載過高,影響搜索效率。并且當(dāng)搜索引擎需要調(diào)用多個(gè)接口時(shí),主線程需要按一定順序逐一等待所調(diào)用的接口,等待消耗的時(shí)間較長(zhǎng)。
另一種搜索引擎的執(zhí)行方法為異步執(zhí)行,即系統(tǒng)開啟主線程用來依次調(diào)用搜索引擎的多個(gè)接口,并每次在調(diào)用接口后釋放當(dāng)前的主線程,當(dāng)所調(diào)用的接口返回?cái)?shù)據(jù)后系統(tǒng)重新啟用新的線程獲取該返回?cái)?shù)據(jù)進(jìn)行處理,數(shù)據(jù)處理結(jié)束后該線程繼續(xù)調(diào)用下一接口,直至所有需要調(diào)用的接口均被調(diào)用后,繼續(xù)執(zhí)行后續(xù)數(shù)據(jù)組裝的步驟。圖2為現(xiàn)有技術(shù)提供的一種搜索引擎的執(zhí)行方法為異步執(zhí)行的原理圖。如圖2所示,系統(tǒng)開啟主線程用來調(diào)用接口a,在調(diào)用后主線程被釋放,一直到所調(diào)用的接口返回?cái)?shù)據(jù)后,開啟新的主線程獲取該返回?cái)?shù)據(jù)進(jìn)行處理,處理結(jié)束后,該主線程繼續(xù)調(diào)用接口b并完成后續(xù)調(diào)用。很顯然,這種方法中主線程仍是按照一定順序逐一調(diào)用接口,調(diào)用接口所用的總耗時(shí)為調(diào)用所有接口的時(shí)間總和。但是在實(shí)際情況下很多調(diào)用接口返回的數(shù)據(jù)之間并沒有依賴關(guān)系,可見這種搜索引擎的執(zhí)行方法增加了搜索rt(應(yīng)用接口的響應(yīng)時(shí)間),造成了不必要的時(shí)間開銷。
由此可見,為搜索引擎提供一種調(diào)用接口時(shí)線程的調(diào)度方法以達(dá)到降低其搜索rt的目的,是本領(lǐng)域技術(shù)人員亟待解決的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法及裝置,通過多條線程同時(shí)對(duì)搜索引擎所需的接口進(jìn)行調(diào)用和返回值處理,降低了搜索rt,提升了搜索引擎的處理速度。
為解決上述技術(shù)問題,本發(fā)明提供一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法,包括以下步驟:
接收所述搜索引擎對(duì)n個(gè)接口的調(diào)用請(qǐng)求,并啟動(dòng)n個(gè)線程以同時(shí)調(diào)用所述n個(gè)接口;
當(dāng)所述接口獲取到返回值時(shí),根據(jù)所述返回值的數(shù)量啟動(dòng)相應(yīng)數(shù)量的線程對(duì)所述返回值進(jìn)行數(shù)據(jù)處理,并獲得處理結(jié)果;
對(duì)各所述處理結(jié)果進(jìn)行組裝以得到所述搜索引擎對(duì)應(yīng)的搜索結(jié)果;
其中,n為大于或等于1的正整數(shù)。
優(yōu)選的,所述啟動(dòng)n個(gè)線程以同時(shí)調(diào)用所述n個(gè)接口之后,還包括:釋放n個(gè)所述線程至線程池。
優(yōu)選的,所述啟動(dòng)n個(gè)線程以同時(shí)調(diào)用所述n個(gè)接口之后,還包括:判斷當(dāng)前系統(tǒng)的qps是否超過閾值;
如果是,則釋放n個(gè)所述線程至線程池,否則,控制n個(gè)所述線程處于阻塞狀態(tài)。
優(yōu)選的,當(dāng)釋放n個(gè)所述線程至所述線程池后,則所述根據(jù)所述返回值的數(shù)量啟動(dòng)相應(yīng)數(shù)量的線程對(duì)所述返回值進(jìn)行數(shù)據(jù)處理具體為:
根據(jù)當(dāng)前所述返回值的數(shù)量,在所述線程池中的空閑線程中重新分配相應(yīng)數(shù)量的線程,并啟動(dòng)重新分配后的線程以對(duì)所述返回值進(jìn)行數(shù)據(jù)處理。
優(yōu)選的,當(dāng)控制n個(gè)所述線程處于阻塞狀態(tài)后,則所述根據(jù)所述返回值的數(shù)量啟動(dòng)相應(yīng)數(shù)量的線程對(duì)所述返回值進(jìn)行數(shù)據(jù)處理具體為:
根據(jù)當(dāng)前所述返回值的數(shù)量再次啟動(dòng)相應(yīng)數(shù)量的處于阻塞狀態(tài)的線程以對(duì)所述返回值進(jìn)行數(shù)據(jù)處理。
優(yōu)選的,所述重新分配后的線程的數(shù)量為n個(gè)。
優(yōu)選的,所述接口具體包括:二方接口。
此外,本發(fā)明還提供一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度裝置,包括:
啟動(dòng)調(diào)用模塊,用于接收所述搜索引擎對(duì)n個(gè)接口的調(diào)用請(qǐng)求,并啟動(dòng)n個(gè)線程以同時(shí)調(diào)用所述n個(gè)接口;
接收處理模塊,用于當(dāng)所述接口獲取到返回值時(shí),根據(jù)所述返回值的數(shù)量啟動(dòng)相應(yīng)數(shù)量的線程對(duì)所述返回值進(jìn)行數(shù)據(jù)處理,并獲得處理結(jié)果;
結(jié)果組裝模塊,用于對(duì)各所述處理結(jié)果進(jìn)行組裝以得到所述搜索引擎對(duì)應(yīng)的搜索結(jié)果;
其中,n為大于或等于1的正整數(shù)。
優(yōu)選的,還包括:
釋放模塊,用于在所述啟動(dòng)調(diào)用模塊啟動(dòng)n個(gè)線程以同時(shí)調(diào)用所述n個(gè)接口后,釋放n個(gè)所述線程至線程池。
優(yōu)選的,還包括:
判斷模塊,用于在所述啟動(dòng)調(diào)用模塊在啟動(dòng)n個(gè)線程以同時(shí)調(diào)用所述n個(gè)接口之后,判斷當(dāng)前系統(tǒng)的qps是否超過閾值;
如果是,則觸發(fā)釋放模塊,否則,觸發(fā)控制模塊,
所述釋放模塊,用于釋放n個(gè)所述線程至線程池;
所述控制模塊,用于控制n個(gè)所述線程處于阻塞狀態(tài)。
本發(fā)明所提供的一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法,通過開啟多個(gè)線程同時(shí)調(diào)用多個(gè)接口,相比于開啟一個(gè)線程順序去調(diào)用多個(gè)接口的方法,開啟多個(gè)線程可以使線程對(duì)多個(gè)接口的調(diào)用并行進(jìn)行,相當(dāng)于把一個(gè)線程對(duì)多個(gè)接口的調(diào)用變?yōu)槎鄠€(gè)線程分別對(duì)每一個(gè)接口進(jìn)行調(diào)用,每一個(gè)需要調(diào)用的接口都有一個(gè)獨(dú)立的線程與之對(duì)應(yīng),每個(gè)線程之間互不影響。所以調(diào)用接口所花費(fèi)的整體時(shí)間僅為調(diào)用接口時(shí)用時(shí)最久的接口所用的時(shí)間,而只開啟一個(gè)線程順序的去調(diào)用多個(gè)接口的方法,所需要花費(fèi)的整體時(shí)間是所有接口被調(diào)用的時(shí)間的總和。并且因?yàn)樵谒阉饕嬷?,?duì)接口的調(diào)用往往不存在依賴關(guān)系,所以本發(fā)明所提供的方法并不會(huì)因?yàn)榫€程并行的對(duì)接口進(jìn)行調(diào)用而造成結(jié)果出現(xiàn)錯(cuò)誤。顯然,本發(fā)明提供的方法在很大程度上降低了搜索rt,提高了搜索效率。此外,本發(fā)明還提供一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度裝置,有益效果如上所述。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例,下面將對(duì)實(shí)施例中所需要使用的附圖做簡(jiǎn)單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有技術(shù)提供的一種搜索引擎的執(zhí)行方法為同步執(zhí)行的原理圖;
圖2為現(xiàn)有技術(shù)提供的一種搜索引擎的執(zhí)行方法為異步執(zhí)行的原理圖;
圖3為本發(fā)明實(shí)施例提供的一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法的流程圖;
圖4為本發(fā)明實(shí)施例提供的另一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法的流程圖;
圖5為本發(fā)明實(shí)施例提供的另一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法的流程圖;
圖6為本發(fā)明實(shí)施例提供的一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下,所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)范圍。
本發(fā)明的核心是提供一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法,該調(diào)度方法在搜索引擎需要調(diào)用多個(gè)接口時(shí),采用與需調(diào)用的接口數(shù)量一致的線程分別對(duì)每一個(gè)接口進(jìn)行調(diào)用,并采用多個(gè)線程分別進(jìn)行接口返回?cái)?shù)據(jù)的處理,最后對(duì)處理結(jié)果進(jìn)行組裝獲得搜索結(jié)果。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。
實(shí)施例一
圖3為本發(fā)明實(shí)施例提供的一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法的流程圖。請(qǐng)參考圖3,搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法具體步驟包括:
步驟s10:接收搜索引擎對(duì)n個(gè)接口的調(diào)用請(qǐng)求,并啟動(dòng)n個(gè)線程以同時(shí)調(diào)用n個(gè)接口。
本步驟通過開啟多個(gè)線程去同時(shí)處理搜索引擎需要調(diào)用多個(gè)接口的請(qǐng)求,開啟的每一個(gè)線程同時(shí)去調(diào)用其對(duì)應(yīng)的接口。
其中,由于n為搜索引擎所需要調(diào)用的接口數(shù),故n為大于或等于1的正整數(shù)。
作為優(yōu)選地實(shí)施方式,接口可以是公司內(nèi)部自己開發(fā)的二方接口,也可以是第三方公司提供的三方接口等,在此不做限定。
在具體實(shí)施中,在開啟線程時(shí),可能會(huì)因?yàn)楫?dāng)前線程池中的線程數(shù)量不足或其它客觀原因?qū)е抡{(diào)用接口所需要的多個(gè)線程不能同時(shí)被開啟,會(huì)出現(xiàn)一部分線程先被開啟,另外一部分線程稍有延遲。但可以理解的是在不影響本發(fā)明整體思想和整體方法執(zhí)行的前提下,這種延遲是可以接受的。
步驟s11:當(dāng)接口獲取到返回值時(shí),根據(jù)返回值的數(shù)量啟動(dòng)相應(yīng)數(shù)量的線程對(duì)返回值進(jìn)行數(shù)據(jù)處理,并獲得處理結(jié)果。
本步驟中,由于每一個(gè)接口獲得返回值的時(shí)間并不相同,所以每當(dāng)有接口得到返回值時(shí)就開啟一個(gè)與該接口對(duì)應(yīng)的線程,就相當(dāng)于每一個(gè)被啟動(dòng)的線程均獨(dú)立處理自己對(duì)應(yīng)接口的返回值,并獲得處理結(jié)果。
其中,數(shù)據(jù)處理可以是數(shù)據(jù)解析等,或是根據(jù)具體需要所進(jìn)行的一系列數(shù)據(jù)操作,在此不做具體限定。需要說明的是,本步驟中,啟動(dòng)相應(yīng)數(shù)量的線程可以是按照最初時(shí)線程與接口的對(duì)應(yīng)關(guān)系,再次啟動(dòng)對(duì)應(yīng)的線程,也可以是重新在線程池中分配新的線程,本實(shí)施例不作限定,對(duì)應(yīng)的具體實(shí)施方式在下文中詳細(xì)描述。另外,最初參與接口調(diào)用的那些線程可以控制其阻塞,也可以釋放至線程池,具體如何操作可以根據(jù)當(dāng)前系統(tǒng)qps等其它參數(shù)共同決定,在此不作限定。當(dāng)然,在接口獲得返回值時(shí),可以在每一個(gè)接口得到返回值時(shí)就分配一個(gè)與該接口對(duì)應(yīng)的線程。當(dāng)然也可以是等全部的n個(gè)接口得到返回值后同時(shí)為各接口分配對(duì)應(yīng)的線程。
步驟s12:對(duì)各處理結(jié)果進(jìn)行組裝以得到搜索引擎對(duì)應(yīng)的搜索結(jié)果。
本步驟中,是將所有被調(diào)接口的返回值的處理結(jié)果進(jìn)行組裝,得到可為用戶展示的搜索結(jié)果。可以理解的是,對(duì)于得到的各處理結(jié)果,如何進(jìn)行組裝為現(xiàn)有技術(shù),本實(shí)施例不再贅述。
本實(shí)施例提供的搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法,其采用多個(gè)線程同時(shí)去調(diào)用需要調(diào)用的接口,每一個(gè)線程只需要去調(diào)用自己對(duì)應(yīng)的接口。這樣做的好處在于,開啟多個(gè)線程,可以對(duì)需要調(diào)用的接口同時(shí)進(jìn)行調(diào)用,不用因?yàn)槟骋粋€(gè)接口獲得返回值的速度較慢而影響調(diào)用其它接口的進(jìn)度,從而避免了現(xiàn)有技術(shù)中只開啟一個(gè)線程按順序逐個(gè)調(diào)用需要調(diào)用的接口所帶來了時(shí)間累加的問題。同理的,在處理接口返回值的時(shí)候,也采用開啟多個(gè)線程的方法,每個(gè)線程對(duì)應(yīng)處理所調(diào)用接口的返回值。可以理解的是,在本發(fā)明提供的方法中,調(diào)用接口所花費(fèi)的整體時(shí)間僅為調(diào)用的接口中獲得返回值所用時(shí)間最久的,而只開啟一個(gè)線程順序的去調(diào)用多個(gè)接口的方法,所需要花費(fèi)的整體時(shí)間是所有接口被調(diào)用的時(shí)間的總和。并且搜索引擎需要調(diào)用的接口之間往往不存在依賴關(guān)系,所以不會(huì)涉及到由于非順序調(diào)用而造成結(jié)果出現(xiàn)錯(cuò)誤的情況。
顯而易見的,由于本發(fā)明所提供的方法是多個(gè)線程共同處理對(duì)接口的調(diào)用和處理接口返回值,所以在很大程度上降低了搜索rt,減少了不必要的時(shí)間開銷,提高了搜索引擎的搜索速度。
實(shí)施例二
由于在線程池的線程數(shù)量有限,當(dāng)調(diào)用多個(gè)接口時(shí)可能或出現(xiàn)大量占用線程資源的情況,進(jìn)而導(dǎo)致qps(每秒查詢次數(shù))很高,查詢效率降低等問題。
在考慮到上述問題的情況下,本實(shí)施例的方法進(jìn)一步包括:釋放n個(gè)線程至線程池。
對(duì)應(yīng)步驟如下:
請(qǐng)參考圖4,如圖所示的是本發(fā)明在實(shí)施例二下的步驟流程圖,具體包括:
步驟s10:接收搜索引擎對(duì)n個(gè)接口的調(diào)用請(qǐng)求,并啟動(dòng)n個(gè)線程以同時(shí)調(diào)用n個(gè)接口。
步驟s20:釋放n個(gè)線程至線程池。
本步驟中,將調(diào)用接口結(jié)束的線程釋放回線程池。因?yàn)榻涌谠讷@取返回值的這段時(shí)間,線程在不被釋放的情況下也只能處于阻塞狀態(tài),并等待接口獲得返回值后重新開啟以處理接口的返回值。由于處于阻塞狀態(tài)的線程無法作為可用資源而被調(diào)用去處理其它系統(tǒng)任務(wù),所以線程被阻塞就相當(dāng)于占用了系統(tǒng)的可用資源,而系統(tǒng)線程池中的線程資源往往有限,過多線程被阻塞會(huì)影響系統(tǒng)的整體工作效率??梢岳斫獾氖?,在調(diào)用接口結(jié)束后馬上釋放所用的線程,其好處在于可以減輕線程池資源的占用程度,進(jìn)而降低系統(tǒng)的負(fù)載和qps,提高搜索引擎的搜索效率。
步驟s21:根據(jù)當(dāng)前返回值的數(shù)量,在線程池中的空閑線程中重新分配相應(yīng)數(shù)量的線程,并啟動(dòng)重新分配后的線程以對(duì)返回值進(jìn)行數(shù)據(jù)處理。
本步驟中,重新為獲得返回值的接口分配線程以處理接口的返回值。由于每一個(gè)接口獲得返回值的時(shí)間都是不確定的,所以當(dāng)接口有返回值時(shí)再重新為其分配線程的好處在于,讓線程能盡可能在執(zhí)行實(shí)際工作而不是為了等待接口獲得返回值而處于等待或阻塞狀態(tài),這樣就可以減少出現(xiàn)雖占用線程池中線程,該線程卻不工作的情況。低系統(tǒng)的負(fù)載和qps,提高搜索引擎的搜索效率。
步驟s12:對(duì)各處理結(jié)果進(jìn)行組裝以得到搜索引擎對(duì)應(yīng)的搜索結(jié)果。
在本實(shí)施例的基礎(chǔ)上,作為一種優(yōu)選的實(shí)施方式,重新分配后的線程的數(shù)量為n個(gè)。
可以理解的是,本實(shí)施例中,當(dāng)系統(tǒng)為在等待所有接口均有返回值后再分配線程的執(zhí)行情況下,重新分配的線程的個(gè)數(shù)可以為與之前所釋放線程的數(shù)量相同的n個(gè)。當(dāng)然,重新分配的線程的個(gè)數(shù)也可以少于所調(diào)用的接口數(shù),因?yàn)榭赡軙?huì)出現(xiàn)某一個(gè)接口的數(shù)據(jù)被線程處理結(jié)束后,另一個(gè)接口剛獲得返回值,這種情況下則不需要資源池再分配新的線程,而是使用該線程繼續(xù)處理另一個(gè)接口的返回值。
在本實(shí)施例中,線程在調(diào)用接口后立刻釋放回線程池,直到接口有返回值時(shí),再重新分配線程去處理接口的返回值,這很大程度提高了線程的使用效率,并且也為其它任務(wù)下的接口調(diào)用工作提供了足夠的線程資源。
實(shí)施例三
考慮到重新分配線程去處理接口返回值的情況下可能會(huì)遇到當(dāng)前線程池中的線程不夠分配,或是重新分配線程時(shí)由于系統(tǒng)等原因可能會(huì)出現(xiàn)延遲,進(jìn)而影響整體的搜索效率。本實(shí)施例為針對(duì)上述情況的一種改進(jìn)方法如下:
請(qǐng)參考圖5,如圖所示的是本發(fā)明在實(shí)施例三下的步驟流程圖,具體包括:
步驟s10:接收搜索引擎對(duì)n個(gè)接口的調(diào)用請(qǐng)求,并啟動(dòng)n個(gè)線程以同時(shí)調(diào)用n個(gè)接口。
步驟s30:判斷當(dāng)前系統(tǒng)的qps是否超過閾值。
本步驟的目的在于判斷當(dāng)前系統(tǒng)中的線程資源量是否能夠達(dá)到閾值,進(jìn)而來確定當(dāng)前系統(tǒng)條件是否允許在線程調(diào)用接口后使線程阻塞以等待接口獲得返回值。當(dāng)然,這里雖采用qps作為判斷條件,但可用于判斷的參數(shù)也可以是線程池中線程的使用率等,在此并不做限定。另外,閾值的選取可以是根據(jù)系統(tǒng)當(dāng)前的整體狀況動(dòng)態(tài)變化的值,也可以是根據(jù)人為經(jīng)驗(yàn)或其它方式確定的固定值。
若是,則執(zhí)行步驟s20,否則,執(zhí)行步驟s31。
步驟s20:釋放n個(gè)線程至線程池。
步驟s21:根據(jù)當(dāng)前返回值的數(shù)量,在線程池中的空閑線程中重新分配相應(yīng)數(shù)量的線程,并啟動(dòng)重新分配后的線程以對(duì)返回值進(jìn)行數(shù)據(jù)處理。
步驟s12:對(duì)各處理結(jié)果進(jìn)行組裝以得到搜索引擎對(duì)應(yīng)的搜索結(jié)果。
步驟s31:控制n個(gè)線程處于阻塞狀態(tài)。
步驟s32:根據(jù)當(dāng)前返回值的數(shù)量再次啟動(dòng)響應(yīng)數(shù)量的處于阻塞狀態(tài)的線程以對(duì)返回值進(jìn)行數(shù)據(jù)處理。
在本步驟中,因?yàn)樯婕暗矫總€(gè)接口獲得返回值的時(shí)間長(zhǎng)短不同,所以被阻塞的線程并不是同時(shí)再次啟動(dòng),而是當(dāng)某接口獲得了返回值時(shí)再次啟動(dòng)其對(duì)應(yīng)的線程。
步驟s12:對(duì)各處理結(jié)果進(jìn)行組裝以得到搜索引擎對(duì)應(yīng)的搜索結(jié)果。
本實(shí)施例中,根據(jù)系統(tǒng)當(dāng)前的線程資源情況,確定是否在線程調(diào)用接口后使其阻塞,并等待接口獲得返回值后,重新開啟阻塞狀態(tài)的線程以處理接口返回值。這樣做的好處在于,節(jié)省了為接口重新分配線程所需要的時(shí)間,但是這種方法會(huì)相對(duì)提高系統(tǒng)的qps??梢岳斫獾氖?,本實(shí)施例所提供的方法更適宜在系統(tǒng)當(dāng)前的qps很低,或者是用戶搜索較少但是需要更快的搜索響應(yīng)速度等情況下所應(yīng)用。
在上述實(shí)施例中,詳細(xì)說明了搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法對(duì)應(yīng)的實(shí)施例,本發(fā)明還提供一種與該方法對(duì)應(yīng)的搜索引擎調(diào)用接口時(shí)線程的調(diào)度裝置,具體實(shí)施方式如下。
實(shí)施例四
圖6為本發(fā)明實(shí)施例提供的一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度裝置的結(jié)構(gòu)圖。本發(fā)明實(shí)施例提供的一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度裝置,具體包括:
啟動(dòng)調(diào)用模塊10,用于接收搜索引擎對(duì)n個(gè)接口的調(diào)用請(qǐng)求,并啟動(dòng)n個(gè)線程以同時(shí)調(diào)用n個(gè)接口。
接收處理模塊11,用于當(dāng)接口獲取到返回值時(shí),根據(jù)返回值的數(shù)量啟動(dòng)相應(yīng)數(shù)量的線程對(duì)返回值進(jìn)行數(shù)據(jù)處理,并獲得處理結(jié)果;
結(jié)果組裝模塊12,用于對(duì)各處理結(jié)果進(jìn)行組裝以得到搜索引擎對(duì)應(yīng)的搜索結(jié)果。
本發(fā)明所提供的一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度裝置,通過開啟多個(gè)線程同時(shí)調(diào)用多個(gè)接口,相比于開啟一個(gè)線程順序去調(diào)用多個(gè)接口,開啟多個(gè)線程可以使線程對(duì)多個(gè)接口的調(diào)用并行進(jìn)行,相當(dāng)于把一個(gè)線程對(duì)多個(gè)接口的調(diào)用變?yōu)槎鄠€(gè)線程分別對(duì)每一個(gè)接口進(jìn)行調(diào)用,每一個(gè)需要調(diào)用的接口都有一個(gè)獨(dú)立的線程與之對(duì)應(yīng),每個(gè)線程之間互不影響。所以調(diào)用接口所花費(fèi)的整體時(shí)間僅為調(diào)用接口時(shí)用時(shí)最久的接口所用的時(shí)間,而只開啟一個(gè)線程順序的去調(diào)用多個(gè)接口,所需要花費(fèi)的整體時(shí)間是所有接口被調(diào)用的時(shí)間的總和。并且因?yàn)樵谒阉饕嬷校瑢?duì)接口的調(diào)用往往不存在依賴關(guān)系,所以本發(fā)明所提供的裝置并不會(huì)因?yàn)榫€程并行的對(duì)接口進(jìn)行調(diào)用而造成結(jié)果出現(xiàn)錯(cuò)誤。顯然,本發(fā)明提供的裝置在很大程度上降低了搜索rt,提高了搜索效率。
在實(shí)施例四的基礎(chǔ)上,該裝置還包括:
釋放模塊,用于在調(diào)動(dòng)調(diào)用模塊啟動(dòng)n個(gè)線程以同時(shí)調(diào)用n個(gè)接口后,釋放n個(gè)線程至線程池。
在實(shí)施例四的基礎(chǔ)上,該裝置還包括:判斷模塊,用于判斷當(dāng)前系統(tǒng)的qps是否超過閾值,如果是,則觸發(fā)釋放模塊;否則,觸發(fā)控制模塊。
釋放模塊,用于釋放n個(gè)線程至線程池;
控制模塊,用于控制n個(gè)線程處于阻塞狀態(tài)。
由于裝置部分的實(shí)施例與方法部分的實(shí)施例相互對(duì)應(yīng),因此裝置部分的實(shí)施例請(qǐng)參見方法部分的實(shí)施例的描述,這里暫不贅述。
以上對(duì)本發(fā)明所提供的一種搜索引擎調(diào)用接口時(shí)線程的調(diào)度方法及裝置進(jìn)行了詳細(xì)介紹。說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法部分說明即可。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。
還需要說明的是,在本說明書中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。