Soa架構(gòu)下的多線程請(qǐng)求方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開(kāi)了一種SOA架構(gòu)下的多線程請(qǐng)求方法及系統(tǒng)。該SOA架構(gòu)下的多線程請(qǐng)求方法及系統(tǒng),通過(guò)設(shè)置線程池以對(duì)所有子系統(tǒng)的服務(wù)請(qǐng)求進(jìn)行統(tǒng)一管理并建立相應(yīng)的線程,并行執(zhí)行多個(gè)線程,從而充分利用了SOA架構(gòu)的分布式結(jié)構(gòu),使得對(duì)于無(wú)需逐個(gè)調(diào)用多個(gè)子系統(tǒng)的服務(wù)而是并行的調(diào)用多個(gè)子系統(tǒng)的服務(wù),大大改善了對(duì)于系統(tǒng)資源的利用,縮短了所有子系統(tǒng)的服務(wù)請(qǐng)求的平均響應(yīng)時(shí)間,同時(shí)使得SOA架構(gòu)下的多個(gè)子系統(tǒng)間的服務(wù)請(qǐng)求更易于管理。
【專利說(shuō)明】SOA架構(gòu)下的多線程請(qǐng)求方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種SOA架構(gòu)下的多線程請(qǐng)求方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著電子商務(wù)的蓬勃發(fā)展,現(xiàn)在的電子商務(wù)系統(tǒng)越來(lái)越龐大,各系統(tǒng)中包含的應(yīng)用錯(cuò)綜復(fù)雜,為了方便管理這些應(yīng)用關(guān)系,很多公司都開(kāi)始使用面向服務(wù)的體系結(jié)構(gòu),即SOA架構(gòu)。SOA架構(gòu)是一類(lèi)分布式系統(tǒng)的體系結(jié)構(gòu),它將應(yīng)用程序的不同功能單元(S卩服務(wù))通過(guò)這些服務(wù)之間定義良好的接口和契約聯(lián)系起來(lái)。接口是采用中立的方式進(jìn)行定義的,獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)建在各種各樣的系統(tǒng)中的服務(wù)可以以一種統(tǒng)一和通用的方式進(jìn)行交互。
[0003]在這種架構(gòu)下,各應(yīng)用通過(guò)服務(wù)進(jìn)行交互,達(dá)到解耦。然而,隨著服務(wù)的細(xì)分和完善,提供的服務(wù)越來(lái)越多,各應(yīng)用需要調(diào)用的服務(wù)也越來(lái)越多。需要調(diào)用的服務(wù)可能是由SOA架構(gòu)下的同一個(gè)子系統(tǒng)提供,也可能分別由不同的子系統(tǒng)提供。現(xiàn)有的SOA架構(gòu)下,當(dāng)一個(gè)應(yīng)用需要調(diào)用多個(gè)服務(wù)時(shí),需要逐個(gè)調(diào)用,即調(diào)用一個(gè)服務(wù)后需要等待該服務(wù)響應(yīng)后,再去請(qǐng)求下一個(gè)服務(wù)。如果需要調(diào)用的多個(gè)服務(wù)中,某一個(gè)服務(wù)響應(yīng)較慢,則其他服務(wù)的調(diào)用都需要等待,非常浪費(fèi)系統(tǒng)資源和時(shí)間。
【發(fā)明內(nèi)容】
[0004]本發(fā)明要解決的技術(shù)問(wèn)題是為了克服現(xiàn)有技術(shù)中SOA架構(gòu)中的一個(gè)子系統(tǒng)向其他子系統(tǒng)調(diào)用服務(wù)時(shí)采用逐個(gè)調(diào)用的方式,需要依次等待其他子系統(tǒng)的服務(wù)響應(yīng),應(yīng)用執(zhí)行的效率低下且浪費(fèi)時(shí)間和系統(tǒng)資源的缺陷,提出一種SOA架構(gòu)下的多線程請(qǐng)求方法及系統(tǒng)。
[0005]本發(fā)明是通過(guò)下述技術(shù)方案來(lái)解決上述技術(shù)問(wèn)題的:
[0006]本發(fā)明提供了一種SOA架構(gòu)下的多線程請(qǐng)求方法,其特點(diǎn)在于,包括以下步驟:
[0007]S1、接收至少一子系統(tǒng)發(fā)出的至少一組服務(wù)請(qǐng)求,將該至少一組服務(wù)請(qǐng)求的狀態(tài)分別記錄為執(zhí)行中;
[0008]S2、在一線程池中創(chuàng)建至少一個(gè)線程,該至少一個(gè)線程和執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng),該至少一個(gè)線程進(jìn)入一等待隊(duì)列,該等待隊(duì)列用于按創(chuàng)建時(shí)間從早到晚的順序依次排列線程;
[0009]S3、判斷該線程池中正在執(zhí)行的線程數(shù)量是否小于一最大并發(fā)數(shù),在判斷結(jié)果為否的情況下重復(fù)執(zhí)行S3,在判斷結(jié)果為是的情況下執(zhí)行S4 ;
[0010]S4、順序依次選取該等待隊(duì)列中的線程并執(zhí)行,以使得正在執(zhí)行的線程數(shù)量等于該最大并發(fā)數(shù);
[0011]S5、判斷是否有任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程已全部從該線程池中移除,在判斷結(jié)果為否的情況下執(zhí)行S3,在判斷結(jié)果為是的情況下執(zhí)行S6 ;
[0012]S6、將該任意一組或多組的服務(wù)請(qǐng)求的狀態(tài)更改為執(zhí)行完畢;
[0013]S7、將該任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程執(zhí)行的結(jié)果分別返回至發(fā)出該任意一組或多組的服務(wù)請(qǐng)求的子系統(tǒng),并執(zhí)行s3。
[0014]在SOA架構(gòu)中,各個(gè)子系統(tǒng)之間通過(guò)系統(tǒng)總線進(jìn)行通信交互,各個(gè)子系統(tǒng)是完全獨(dú)立的,每個(gè)子系統(tǒng)可獨(dú)立承擔(dān)一個(gè)方面的業(yè)務(wù)邏輯。一組服務(wù)請(qǐng)求對(duì)應(yīng)于一個(gè)操作,即在一個(gè)子系統(tǒng)上的一個(gè)操作會(huì)產(chǎn)生一組服務(wù)請(qǐng)求。一組服務(wù)請(qǐng)求可以包括了向其他子系統(tǒng)發(fā)出的多個(gè)服務(wù)請(qǐng)求。當(dāng)其他子系統(tǒng)響應(yīng)了服務(wù)請(qǐng)求時(shí),會(huì)把服務(wù)請(qǐng)求所需要的數(shù)據(jù)發(fā)給發(fā)出服務(wù)請(qǐng)求的子系統(tǒng)。
[0015]S1中的一組服務(wù)請(qǐng)求的作用即一子系統(tǒng)要執(zhí)行的應(yīng)用程序首先請(qǐng)求服務(wù)。然后,S2中創(chuàng)建線程池以及和服務(wù)請(qǐng)求對(duì)應(yīng)的線程。由于線程池以及能夠并行執(zhí)行的線程數(shù)量是有限的,因而先將線程排序。S3中判斷該線程池中正在執(zhí)行的線程數(shù)量是否小于一最大并發(fā)數(shù),如果判斷結(jié)果為否,則重復(fù)執(zhí)行這一判斷,即該等待隊(duì)列中的線程繼續(xù)等待。該線程池內(nèi)的正在執(zhí)行的線程以并行方式執(zhí)行,多個(gè)線程各自的執(zhí)行之間沒(méi)有時(shí)序性的關(guān)系。當(dāng)該線程池中有線程執(zhí)行完畢時(shí),則正在執(zhí)行的線程數(shù)量就會(huì)變少,而當(dāng)判斷結(jié)果為是時(shí),即可并行執(zhí)行的線程出現(xiàn)了空缺,執(zhí)行S4,順序依次選取該等待隊(duì)列中的線程并執(zhí)行,以達(dá)到充分利用資源的目的。
[0016]如果有一組的服務(wù)請(qǐng)求相應(yīng)的線程已全部移除,則說(shuō)明這些線程都已經(jīng)執(zhí)行完畢。如上所述的,一組服務(wù)請(qǐng)求對(duì)應(yīng)于一個(gè)操作,即一子系統(tǒng)要執(zhí)行的應(yīng)用程序的所有服務(wù)請(qǐng)求都已經(jīng)完成。35至&的目的即在一組服務(wù)請(qǐng)求的處理完成后,將結(jié)果數(shù)據(jù)匯總返回至發(fā)出該組服務(wù)請(qǐng)求的子系統(tǒng),返回線程執(zhí)行的結(jié)果也即告知發(fā)出該組服務(wù)請(qǐng)求的子系統(tǒng)可以進(jìn)行下一步操作或繼續(xù)執(zhí)行應(yīng)用程序。
[0017]本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,上述方法流程針對(duì)的是某一次接收到的至少一子系統(tǒng)發(fā)出的至少一組服務(wù)請(qǐng)求,在任意時(shí)刻如果有子系統(tǒng)發(fā)出服務(wù)請(qǐng)求,均執(zhí)行Si。
[0018]較佳地,每一組服務(wù)請(qǐng)求均包含了請(qǐng)求用戶的信息,在執(zhí)行S1后執(zhí)行以下步驟:
[0019]Sn、判斷該至少一組服務(wù)請(qǐng)求的請(qǐng)求用戶中,是否有一個(gè)或多個(gè)請(qǐng)求用戶創(chuàng)建的、執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求對(duì)應(yīng)的線程數(shù)量達(dá)到該一個(gè)或多個(gè)請(qǐng)求用戶的線程閾值,在判斷結(jié)果為否的情況下執(zhí)行S2,在判斷結(jié)果為是的情況下執(zhí)行S12 ;
[0020]S12、將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的一組或多組服務(wù)請(qǐng)求更改為延遲執(zhí)行狀態(tài),并執(zhí)行S2 ;
[0021]S6和S7之間還包括以下步驟:
[0022]S61、對(duì)于該一個(gè)或多個(gè)請(qǐng)求用戶,判斷其創(chuàng)建的、執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求對(duì)應(yīng)的線程數(shù)量是否小于其線程閾值,并在判斷結(jié)果為是的情況下將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的、并處于延遲執(zhí)行狀態(tài)的服務(wù)請(qǐng)求更改為執(zhí)行中狀態(tài);
[0023]S62、在該線程池中創(chuàng)建和S61中更改為執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng)的線程,創(chuàng)建的線程進(jìn)入該等待隊(duì)列,并執(zhí)行S7。
[0024]由于在Web應(yīng)用(即網(wǎng)絡(luò)應(yīng)用)中,一個(gè)應(yīng)用程序池下的所有應(yīng)用共享一個(gè)線程池,為了防止某一個(gè)用戶同時(shí)創(chuàng)建大量線程,阻塞其他用戶的請(qǐng)求,因此需要維護(hù)對(duì)單個(gè)用戶的線程最大值,即該線程閾值。容易理解的,對(duì)于不同的用戶,也可設(shè)置不同的線程閾值。線程閾值用來(lái)決定每個(gè)用戶可同時(shí)創(chuàng)建的線程數(shù)量。延遲執(zhí)行狀態(tài)的服務(wù)請(qǐng)求,作為不立即創(chuàng)建相應(yīng)的線程的請(qǐng)求,被存儲(chǔ)于該線程池外。一旦被更改為執(zhí)行中狀態(tài),就會(huì)在該線程池中創(chuàng)建和更改后的服務(wù)請(qǐng)求對(duì)應(yīng)的線程,并進(jìn)入該等待隊(duì)列中。
[0025]較佳地,S3包括以下步驟:
[0026]S31、若該線程池中的線程數(shù)量小于一最小線程數(shù),創(chuàng)建空線程以使得線程數(shù)量等于該最小線程數(shù);
[0027]S32、判斷該線程池中正在執(zhí)行的線程數(shù)量是否小于一最大并發(fā)數(shù),在判斷結(jié)果為否的情況下等待,在判斷結(jié)果為是的情況下執(zhí)行S4。
[0028]該最小線程數(shù)代表了該線程池中保留的最小線程數(shù)量,以節(jié)省創(chuàng)建線程所需的時(shí)間和資源。該最大并發(fā)數(shù)代表了該線程池最多同時(shí)并行執(zhí)行的線程的數(shù)量。該最小線程數(shù)和該最大并發(fā)數(shù)可以由系統(tǒng)自動(dòng)控制,也可以人為控制。對(duì)該最小線程數(shù)和該最大并發(fā)數(shù)的維護(hù)可以采用一個(gè)B/S模式(瀏覽器/服務(wù)器模式)的應(yīng)用程序形式存在,也可以直接以配置文件的形式直接提供給用戶維護(hù),用戶維護(hù)的線程池設(shè)置會(huì)保存在數(shù)據(jù)庫(kù)或者配置文件中。
[0029]較佳地,每個(gè)步驟中均包括:
[0030]記錄每一組服務(wù)請(qǐng)求的狀態(tài)及對(duì)應(yīng)時(shí)刻,并記錄該線程池的狀態(tài)。
[0031]對(duì)于服務(wù)請(qǐng)求和線程池的狀態(tài)的記錄能夠在發(fā)生故障時(shí)更容易的找出故障的原因。
[0032]本發(fā)明還提供了一種SOA架構(gòu)下的多線程請(qǐng)求系統(tǒng),包括一系統(tǒng)總線和至少一子系統(tǒng),該至少一子系統(tǒng)可相互發(fā)送服務(wù)請(qǐng)求,其特點(diǎn)在于,該多線程請(qǐng)求系統(tǒng)還包括:一接收模塊,用于接收該至少一子系統(tǒng)發(fā)出的至少一組服務(wù)請(qǐng)求;一線程創(chuàng)建模塊,用于在一線程池中創(chuàng)建至少一個(gè)線程、該至少一個(gè)線程和執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng),并將該至少一個(gè)線程放入一等待隊(duì)列、該等待隊(duì)列用于按創(chuàng)建時(shí)間從早到晚的順序依次排列線程;一線程管理模塊,用于順序依次選取該等待隊(duì)列中的線程并執(zhí)行,以使得正在執(zhí)行的線程數(shù)量為小于或等于一最大并發(fā)數(shù)的最大值;一狀態(tài)指示模塊,用于在該接收模塊接收該至少一組服務(wù)請(qǐng)求時(shí)將該至少一組服務(wù)請(qǐng)求的狀態(tài)記錄為執(zhí)行中,以及在任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程已全部從該線程池中移除時(shí)將該任意一組或多組服務(wù)請(qǐng)求的狀態(tài)更改為執(zhí)行完畢;一結(jié)果返回模塊,用于將該任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程執(zhí)行的結(jié)果分別返回至發(fā)出該任意一組或多組的服務(wù)請(qǐng)求的子系統(tǒng)。
[0033]該多線程請(qǐng)求系統(tǒng)首先由該接收模塊接收服務(wù)請(qǐng)求,然后該線程創(chuàng)建模塊根據(jù)服務(wù)請(qǐng)求來(lái)創(chuàng)建線程,該線程管理模塊對(duì)創(chuàng)建的線程進(jìn)行執(zhí)行順序的排序以及并行執(zhí)行線程池中的線程。該狀態(tài)指示模塊起到更新服務(wù)請(qǐng)求的狀態(tài)的作用。當(dāng)一組服務(wù)請(qǐng)求對(duì)應(yīng)的線程均執(zhí)行完畢后,該結(jié)果返回模塊將線程執(zhí)行的結(jié)果匯總后返回給發(fā)送相應(yīng)的服務(wù)請(qǐng)求的子系統(tǒng),在返回?cái)?shù)據(jù)的同時(shí)還起到通知子系統(tǒng)可以進(jìn)行下一步的操作或繼續(xù)執(zhí)行應(yīng)用程序的作用。
[0034]較佳地,該多線程請(qǐng)求系統(tǒng)還包括一線程閾值維護(hù)模塊,該線程閾值維護(hù)模塊用于在有一個(gè)或多個(gè)請(qǐng)求用戶創(chuàng)建的正在執(zhí)行的線程數(shù)量達(dá)到該一個(gè)或多個(gè)請(qǐng)求用戶的線程閾值的情況下,將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的一組或多組服務(wù)請(qǐng)求更改為延遲執(zhí)行狀態(tài)。該結(jié)果返回模塊包括一延遲請(qǐng)求重啟單元、一線程新建單元和一返回單元,該延遲請(qǐng)求重啟單元用于判斷該一個(gè)或多個(gè)請(qǐng)求用戶創(chuàng)建的執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求對(duì)應(yīng)的線程數(shù)量是否小于其線程閾值,并在判斷結(jié)果為是的情況下將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的、并處于延遲執(zhí)行狀態(tài)的服務(wù)請(qǐng)求更改為執(zhí)行中狀態(tài)。該線程新建單元用于在該線程池中創(chuàng)建和該延遲請(qǐng)求重啟單元更改為執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng)的線程,并將創(chuàng)建的線程放入該等待隊(duì)列。該返回單元用于將該任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程執(zhí)行的結(jié)果分別返回至發(fā)出該任意一組或多組的服務(wù)請(qǐng)求的子系統(tǒng)。
[0035]在該線程池中的一些線程執(zhí)行完畢后,正在執(zhí)行的線程數(shù)量減少,因而原先因?yàn)橥粋€(gè)用戶創(chuàng)建的正在執(zhí)行的線程數(shù)量達(dá)到線程閾值而狀態(tài)更改為延遲執(zhí)行狀態(tài)的服務(wù)請(qǐng)求有可能可以加入到該線程池內(nèi),該延遲請(qǐng)求重啟單元和該線程新建單元所起的就是這一作用。
[0036]較佳地,該線程管理模塊包括一最小線程數(shù)維護(hù)單元和一最大并發(fā)數(shù)維護(hù)單元,該最小線程數(shù)維護(hù)單元用于在該線程池中的線程數(shù)量小于一最小線程數(shù)時(shí)、創(chuàng)建空線程以使得線程數(shù)量等于該最小線程數(shù),該最大并發(fā)數(shù)維護(hù)單元用于順序依次選取該等待隊(duì)列中的線程并執(zhí)行、以使得正在執(zhí)行的線程數(shù)量為小于或等于該最大并發(fā)數(shù)的最大值。
[0037]較佳地,該多線程請(qǐng)求系統(tǒng)還包括一日志模塊,該日志模塊用于記錄每一組服務(wù)請(qǐng)求的狀態(tài)變化及對(duì)應(yīng)時(shí)刻、并實(shí)時(shí)記錄該線程池的狀態(tài)。
[0038]在符合本領(lǐng)域常識(shí)的基礎(chǔ)上,上述各優(yōu)選條件,可任意組合,即得本發(fā)明各較佳實(shí)例。
[0039]本發(fā)明的積極進(jìn)步效果在于:
[0040]本發(fā)明的SOA架構(gòu)下的多線程請(qǐng)求方法及系統(tǒng),通過(guò)設(shè)置線程池以對(duì)所有子系統(tǒng)的服務(wù)請(qǐng)求進(jìn)行統(tǒng)一管理并建立相應(yīng)的線程,并行執(zhí)行多個(gè)線程,從而充分利用了 SOA架構(gòu)的分布式結(jié)構(gòu),使得對(duì)于無(wú)需逐個(gè)調(diào)用多個(gè)子系統(tǒng)的服務(wù)而是并行的調(diào)用多個(gè)子系統(tǒng)的服務(wù),大大改善了對(duì)于系統(tǒng)資源的利用,縮短了所有子系統(tǒng)的服務(wù)請(qǐng)求的平均響應(yīng)時(shí)間,同時(shí)使得SOA架構(gòu)下的多個(gè)子系統(tǒng)間的服務(wù)請(qǐng)求更易于管理。
【專利附圖】
【附圖說(shuō)明】
[0041]圖1為本發(fā)明實(shí)施例1的SOA架構(gòu)下的多線程請(qǐng)求方法的流程圖。
[0042]圖2為本發(fā)明實(shí)施例2的SOA架構(gòu)下的多線程請(qǐng)求方法的流程圖。
【具體實(shí)施方式】
[0043]下面結(jié)合附圖給出本發(fā)明較佳實(shí)施例,以詳細(xì)說(shuō)明本發(fā)明的技術(shù)方案,但并不因此將本發(fā)明限制在所述的實(shí)施例范圍之中。
[0044]實(shí)施例1
[0045]如圖1所示,本發(fā)明實(shí)施例1的SOA架構(gòu)下的多線程請(qǐng)求方法包括以下步驟:
[0046]S1、接收至少一子系統(tǒng)發(fā)出的至少一組服務(wù)請(qǐng)求,將該至少一組服務(wù)請(qǐng)求的狀態(tài)分別記錄為執(zhí)行中。
[0047]S2、在一線程池中創(chuàng)建至少一個(gè)線程,該至少一個(gè)線程和執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng),該至少一個(gè)線程進(jìn)入一等待隊(duì)列,該等待隊(duì)列用于按創(chuàng)建時(shí)間從早到晚的順序依次排列線程。
[0048]S3、判斷該線程池中正在執(zhí)行的線程數(shù)量是否小于一最大并發(fā)數(shù),在判斷結(jié)果為否的情況下重復(fù)執(zhí)行S3,在判斷結(jié)果為是的情況下執(zhí)行s4。
[0049]S4、順序依次選取該等待隊(duì)列中的線程并執(zhí)行,以使得正在執(zhí)行的線程數(shù)量等于該最大并發(fā)數(shù)。
[0050]S5、判斷是否有任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程已全部從該線程池中移除,在判斷結(jié)果為否的情況下執(zhí)行S3,在判斷結(jié)果為是的情況下執(zhí)行s6。
[0051]S6、將該任意一組或多組的服務(wù)請(qǐng)求的狀態(tài)更改為執(zhí)行完畢。
[0052]S7、將該任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程執(zhí)行的結(jié)果分別返回至發(fā)出該任意一組或多組的服務(wù)請(qǐng)求的子系統(tǒng),并執(zhí)行s3。
[0053]在SOA架構(gòu)中,各個(gè)子系統(tǒng)之間通過(guò)系統(tǒng)總線進(jìn)行通信交互,各個(gè)子系統(tǒng)是完全獨(dú)立的,每個(gè)子系統(tǒng)可獨(dú)立承擔(dān)一個(gè)方面的業(yè)務(wù)邏輯。一組服務(wù)請(qǐng)求對(duì)應(yīng)于一個(gè)操作,即在一個(gè)子系統(tǒng)上的一個(gè)操作會(huì)產(chǎn)生一組服務(wù)請(qǐng)求。一組服務(wù)請(qǐng)求可以包括了向其他子系統(tǒng)發(fā)出的多個(gè)服務(wù)請(qǐng)求。當(dāng)其他子系統(tǒng)響應(yīng)了服務(wù)請(qǐng)求時(shí),會(huì)把服務(wù)請(qǐng)求所需要的數(shù)據(jù)發(fā)給發(fā)出服務(wù)請(qǐng)求的子系統(tǒng)。
[0054]S1中的一組服務(wù)請(qǐng)求的作用即一子系統(tǒng)要執(zhí)行的應(yīng)用程序首先請(qǐng)求服務(wù)。然后,S2中創(chuàng)建線程池以及和服務(wù)請(qǐng)求對(duì)應(yīng)的線程。由于線程池以及能夠并行執(zhí)行的線程數(shù)量是有限的,因而先將線程排序。S3中判斷該線程池中正在執(zhí)行的線程數(shù)量是否小于一最大并發(fā)數(shù),如果判斷結(jié)果為否,則重復(fù)執(zhí)行這一判斷,即該等待隊(duì)列中的線程繼續(xù)等待。該線程池內(nèi)的正在執(zhí)行的線程以并行方式執(zhí)行,多個(gè)線程各自的執(zhí)行之間沒(méi)有時(shí)序性的關(guān)系。當(dāng)該線程池中有線程執(zhí)行完畢時(shí),則正在執(zhí)行的線程數(shù)量就會(huì)變少,而當(dāng)判斷結(jié)果為是時(shí),即可并行執(zhí)行的線程出現(xiàn)了空缺,執(zhí)行S4,順序依次選取該等待隊(duì)列中的線程并執(zhí)行,以達(dá)到充分利用資源的目的。
[0055]如果有一組的服務(wù)請(qǐng)求相應(yīng)的線程已全部移除,則說(shuō)明這些線程都已經(jīng)執(zhí)行完畢。如上所述的,一組服務(wù)請(qǐng)求對(duì)應(yīng)于一個(gè)操作,即一子系統(tǒng)要執(zhí)行的應(yīng)用程序的所有服務(wù)請(qǐng)求都已經(jīng)完成。35至&的目的即在一組服務(wù)請(qǐng)求的處理完成后,將結(jié)果數(shù)據(jù)匯總返回至發(fā)出該組服務(wù)請(qǐng)求的子系統(tǒng),返回線程執(zhí)行的結(jié)果也即告知發(fā)出該組服務(wù)請(qǐng)求的子系統(tǒng)可以進(jìn)行下一步操作或繼續(xù)執(zhí)行應(yīng)用程序。
[0056]下面對(duì)本實(shí)施例的方法的應(yīng)用進(jìn)行舉例說(shuō)明。子系統(tǒng)A需要執(zhí)行一應(yīng)用,該應(yīng)用包括了 3個(gè)服務(wù)請(qǐng)求、分別發(fā)給子系統(tǒng)B、子系統(tǒng)C、子系統(tǒng)D。以現(xiàn)有的常規(guī)處理方式,子系統(tǒng)A需要依次等待子系統(tǒng)B、子系統(tǒng)C和子系統(tǒng)D對(duì)服務(wù)請(qǐng)求的響應(yīng)。如果子系統(tǒng)B、子系統(tǒng)C和子系統(tǒng)D的響應(yīng)分別需要時(shí)間h、t2和t3,那么子系統(tǒng)A執(zhí)行該應(yīng)用得到返回的時(shí)間大致為T(mén)tl,其中應(yīng)用本實(shí)施例的方法進(jìn)行處理時(shí),在該線程池中正在執(zhí)行的線程數(shù)量小于該最大并發(fā)數(shù)且比該最大并發(fā)數(shù)小3的情況下,該應(yīng)用的3個(gè)服務(wù)請(qǐng)求可創(chuàng)建線程并并行執(zhí)行,子系統(tǒng)A執(zhí)行該應(yīng)用得到返回的時(shí)間大致為T(mén)1,其中T1=Hiaxai, t2, t3)。顯然T1CTtlt5而即使該線程池中正在執(zhí)行的線程數(shù)量等于該最大并發(fā)數(shù),使得該應(yīng)用的3個(gè)服務(wù)請(qǐng)求對(duì)應(yīng)的進(jìn)程無(wú)法并行執(zhí)行,子系統(tǒng)A執(zhí)行該應(yīng)用得到返回的時(shí)間也只是和Ttl相同。即本實(shí)施例的方法應(yīng)用于SOA架構(gòu)下,子系統(tǒng)執(zhí)行包含多個(gè)服務(wù)請(qǐng)求的應(yīng)用時(shí),得到返回的時(shí)間小于或等于現(xiàn)有的方法。
[0057]以上僅為舉例說(shuō)明,當(dāng)上述舉例中該應(yīng)用包括的服務(wù)請(qǐng)求數(shù)量越多,本實(shí)施例的SOA架構(gòu)下的多線程請(qǐng)求方法帶來(lái)的時(shí)間上的節(jié)省效果越顯著。相應(yīng)的,也就更好地利用了系統(tǒng)資源。
[0058]本實(shí)施例的SOA架構(gòu)下的多線程請(qǐng)求系統(tǒng),包括一系統(tǒng)總線和至少一子系統(tǒng),該至少一子系統(tǒng)可相互發(fā)送服務(wù)請(qǐng)求,該多線程請(qǐng)求系統(tǒng)還包括:一接收模塊,用于接收該至少一子系統(tǒng)發(fā)出的至少一組服務(wù)請(qǐng)求;一線程創(chuàng)建模塊,用于在一線程池中創(chuàng)建至少一個(gè)線程、該至少一個(gè)線程和執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng),并將該至少一個(gè)線程放入一等待隊(duì)列、該等待隊(duì)列用于按創(chuàng)建時(shí)間從早到晚的順序依次排列線程;一線程管理模塊,用于順序依次選取該等待隊(duì)列中的線程并執(zhí)行,以使得正在執(zhí)行的線程數(shù)量為小于或等于一最大并發(fā)數(shù)的最大值;一狀態(tài)指示模塊,用于在該接收模塊接收該至少一組服務(wù)請(qǐng)求時(shí)將該至少一組服務(wù)請(qǐng)求的狀態(tài)記錄為執(zhí)行中,以及在任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程已全部從該線程池中移除時(shí)將該任意一組或多組服務(wù)請(qǐng)求的狀態(tài)更改為執(zhí)行完畢;一結(jié)果返回模塊,用于將該任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程執(zhí)行的結(jié)果分別返回至發(fā)出該任意一組或多組的服務(wù)請(qǐng)求的子系統(tǒng)。
[0059]該多線程請(qǐng)求系統(tǒng)首先由該接收模塊接收服務(wù)請(qǐng)求,然后該線程創(chuàng)建模塊根據(jù)服務(wù)請(qǐng)求來(lái)創(chuàng)建線程,該線程管理模塊對(duì)創(chuàng)建的線程進(jìn)行執(zhí)行順序的排序以及并行執(zhí)行線程池中的線程。該狀態(tài)指示模塊起到更新服務(wù)請(qǐng)求的狀態(tài)的作用。當(dāng)一組服務(wù)請(qǐng)求對(duì)應(yīng)的線程均執(zhí)行完畢后,該結(jié)果返回模塊將線程執(zhí)行的結(jié)果匯總后返回給發(fā)送相應(yīng)的服務(wù)請(qǐng)求的子系統(tǒng),在返回?cái)?shù)據(jù)的同時(shí)還起到通知子系統(tǒng)可以進(jìn)行下一步的操作或繼續(xù)執(zhí)行應(yīng)用程序的作用
[0060]實(shí)施例2
[0061]本實(shí)施例的SOA架構(gòu)下的多線程請(qǐng)求方法和實(shí)施例1相比差別僅在于,每一組服務(wù)請(qǐng)求均包含了請(qǐng)求用戶的信息,并且在執(zhí)行S1后執(zhí)行以下步驟:
[0062]Sn、判斷該至少一組服務(wù)請(qǐng)求的請(qǐng)求用戶中,是否有一個(gè)或多個(gè)請(qǐng)求用戶創(chuàng)建的、執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求對(duì)應(yīng)的線程數(shù)量達(dá)到該一個(gè)或多個(gè)請(qǐng)求用戶的線程閾值,在判斷結(jié)果為否的情況下執(zhí)行S2,在判斷結(jié)果為是的情況下執(zhí)行s12。
[0063]S12、將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的一組或多組服務(wù)請(qǐng)求更改為延遲執(zhí)行狀態(tài),并執(zhí)行S2。
[0064]S6和S7之間還包括以下步驟:
[0065]S61、對(duì)于該一個(gè)或多個(gè)請(qǐng)求用戶,判斷其創(chuàng)建的、執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求對(duì)應(yīng)的線程數(shù)量是否小于其線程閾值,并在判斷結(jié)果為是的情況下將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的、并處于延遲執(zhí)行狀態(tài)的服務(wù)請(qǐng)求更改為執(zhí)行中狀態(tài)。
[0066]S62、在該線程池中創(chuàng)建和S61中更改為執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng)的線程,創(chuàng)建的線程進(jìn)入該等待隊(duì)列,并執(zhí)行S7。
[0067]由于在Web應(yīng)用中,一個(gè)應(yīng)用程序池下的所有應(yīng)用共享一個(gè)線程池,為了防止某一個(gè)用戶同時(shí)創(chuàng)建大量線程,阻塞其他用戶的請(qǐng)求,因此需要維護(hù)對(duì)單個(gè)用戶的線程最大值,即該線程閾值。容易理解的,對(duì)于不同的用戶,也可設(shè)置不同的線程閾值。線程閾值用來(lái)決定每個(gè)用戶可同時(shí)創(chuàng)建的線程數(shù)量。其中該線程閾值既可以對(duì)所有子系統(tǒng)統(tǒng)一設(shè)置,也可根據(jù)子系統(tǒng)的性能或運(yùn)算能力進(jìn)行設(shè)置,對(duì)于運(yùn)算能力較強(qiáng)的子系統(tǒng),可以將該線程閾值設(shè)置的更大。
[0068]并且S3包括以下步驟:
[0069]S31、若該線程池中的線程數(shù)量小于一最小線程數(shù),創(chuàng)建空線程以使得線程數(shù)量等于該最小線程數(shù)。
[0070]S32、判斷該線程池中正在執(zhí)行的線程數(shù)量是否小于一最大并發(fā)數(shù),在判斷結(jié)果為否的情況下等待,在判斷結(jié)果為是的情況下執(zhí)行s4。
[0071]該最小線程數(shù)代表了該線程池中保留的最小線程數(shù)量,以節(jié)省創(chuàng)建線程所需的時(shí)間和資源。該最大并發(fā)數(shù)代表了該線程池最多同時(shí)并行執(zhí)行的線程的數(shù)量。該最小線程數(shù)和該最大并發(fā)數(shù)可以由系統(tǒng)自動(dòng)控制,也可以人為控制。對(duì)該最小線程數(shù)和該最大并發(fā)數(shù)的維護(hù)可以采用一個(gè)B/S模式(瀏覽器/服務(wù)器模式)的應(yīng)用程序形式存在,也可以直接以配置文件的形式直接提供給用戶維護(hù),用戶維護(hù)的線程池設(shè)置會(huì)保存在數(shù)據(jù)庫(kù)或者配置文件中。
[0072]其中,每個(gè)步驟中均包括:
[0073]記錄每一組服務(wù)請(qǐng)求的狀態(tài)及對(duì)應(yīng)時(shí)刻,并記錄該線程池的狀態(tài)。
[0074]對(duì)于服務(wù)請(qǐng)求和線程池的狀態(tài)的記錄能夠在發(fā)生故障時(shí)更容易的找出故障的原因。
[0075]本實(shí)施例的多線程請(qǐng)求系統(tǒng)和實(shí)施例1相比,差別僅在于:
[0076]本實(shí)施例的多線程請(qǐng)求系統(tǒng)還包括一線程閾值維護(hù)模塊,該線程閾值維護(hù)模塊用于在有一個(gè)或多個(gè)請(qǐng)求用戶創(chuàng)建的正在執(zhí)行的線程數(shù)量達(dá)到該一個(gè)或多個(gè)請(qǐng)求用戶的線程閾值的情況下,將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的一組或多組服務(wù)請(qǐng)求更改為延遲執(zhí)行狀態(tài)。該結(jié)果返回模塊包括一延遲請(qǐng)求重啟單元、一線程新建單元和一返回單元,該延遲請(qǐng)求重啟單元用于判斷該一個(gè)或多個(gè)請(qǐng)求用戶創(chuàng)建的執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求對(duì)應(yīng)的線程數(shù)量是否小于其線程閾值,并在判斷結(jié)果為是的情況下將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的、并處于延遲執(zhí)行狀態(tài)的服務(wù)請(qǐng)求更改為執(zhí)行中狀態(tài)。該線程新建單元用于在該線程池中創(chuàng)建和該延遲請(qǐng)求重啟單元更改為執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng)的線程,并將創(chuàng)建的線程放入該等待隊(duì)列。該返回單元用于將該任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程執(zhí)行的結(jié)果分別返回至發(fā)出該任意一組或多組的服務(wù)請(qǐng)求的子系統(tǒng)。
[0077]在該線程池中的一些線程執(zhí)行完畢后,正在執(zhí)行的線程數(shù)量減少,因而原先因?yàn)橥粋€(gè)用戶創(chuàng)建的正在執(zhí)行的線程數(shù)量達(dá)到線程閾值而狀態(tài)更改為延遲執(zhí)行狀態(tài)的服務(wù)請(qǐng)求有可能可以加入到該線程池內(nèi),該延遲請(qǐng)求重啟單元和該線程新建單元所起的就是這一作用。
[0078]其中,該線程管理模塊包括一最小線程數(shù)維護(hù)單元和一最大并發(fā)數(shù)維護(hù)單元,該最小線程數(shù)維護(hù)單元用于在該線程池中的線程數(shù)量小于一最小線程數(shù)時(shí)、創(chuàng)建空線程以使得線程數(shù)量等于該最小線程數(shù),該最大并發(fā)數(shù)維護(hù)單元用于順序依次選取該等待隊(duì)列中的線程并執(zhí)行、以使得正在執(zhí)行的線程數(shù)量為小于或等于該最大并發(fā)數(shù)的最大值。
[0079]其中,該多線程請(qǐng)求系統(tǒng)還包括一日志模塊,該日志模塊用于記錄每一組服務(wù)請(qǐng)求的狀態(tài)變化及對(duì)應(yīng)時(shí)刻、并實(shí)時(shí)記錄該線程池的狀態(tài)。
[0080]下面對(duì)實(shí)施例2的SOA架構(gòu)下的多線程請(qǐng)求方法及多線程請(qǐng)求系統(tǒng)的具體使用進(jìn)行簡(jiǎn)略的舉例說(shuō)明。
[0081]首先,線程池本身可設(shè)有可容納的線程的最大數(shù)量、最大并發(fā)數(shù)和最小線程數(shù)。用戶可以根據(jù)自身需要對(duì)其進(jìn)行人工配置,也可采用系統(tǒng)的自動(dòng)配置。最大并發(fā)數(shù)不能無(wú)限制的提高,而是受到硬件性能的制約。并且如果最大并發(fā)數(shù)太高,有可能造成一個(gè)用戶的大量線程占據(jù)了系統(tǒng)中的過(guò)多資源影響其他用戶的使用。
[0082]當(dāng)SOA架構(gòu)下的某個(gè)子系統(tǒng)有用戶執(zhí)行一應(yīng)用程序進(jìn)行了一個(gè)操作的時(shí)候,該應(yīng)用程序首先開(kāi)始請(qǐng)求,請(qǐng)求獲準(zhǔn)后向發(fā)送服務(wù)請(qǐng)求。系統(tǒng)先檢查是否已經(jīng)建立了線程池,如果沒(méi)有則要建立一新的線程池。然后針對(duì)這些服務(wù)請(qǐng)求,需要建立相應(yīng)的線程。這時(shí)需要根據(jù)線程池的當(dāng)前情況以及上述參數(shù)設(shè)置來(lái)確定是否有新的線程建立的空間以及執(zhí)行的空間。根據(jù)不同的情況,可能直接創(chuàng)建和這些服務(wù)請(qǐng)求相應(yīng)的線程并執(zhí)行,也可能需要先等待目前正在執(zhí)行的線程完成后空出空間,后一種情況下則需要排隊(duì)等待。
[0083]當(dāng)和用戶執(zhí)行應(yīng)用程序的一個(gè)操作所對(duì)應(yīng)的的一組請(qǐng)求對(duì)應(yīng)的線程全部執(zhí)行完畢了,則系統(tǒng)會(huì)匯總并返回給用戶所有的執(zhí)行結(jié)果。舉例來(lái)說(shuō),這一組請(qǐng)求分別向5個(gè)子系統(tǒng)請(qǐng)求了服務(wù),那么在5個(gè)子系統(tǒng)均對(duì)服務(wù)請(qǐng)求作出了反應(yīng)返回了結(jié)果比如某些查詢的數(shù)據(jù)后,用戶就能夠收到所有查詢到的數(shù)據(jù)。容易理解的,用戶能夠在應(yīng)用程序上進(jìn)行下一步操作了。
[0084]由于這一組請(qǐng)求分別向5個(gè)子系統(tǒng)請(qǐng)求了服務(wù),對(duì)于這5個(gè)子系統(tǒng)而言,他們各自處理請(qǐng)求都需要一定的時(shí)間,但由于各自的處理并行的進(jìn)行,并且充分利用了 SOA架構(gòu)下的子系統(tǒng)均能夠獨(dú)自處理服務(wù),因此不用等待一個(gè)請(qǐng)求的處理執(zhí)行完畢再進(jìn)行其他請(qǐng)求的處理,因而充分利用了 SOA架構(gòu)分布式服務(wù)的優(yōu)點(diǎn),大大提高了系統(tǒng)運(yùn)行的效率。
[0085]該日志模塊,主要用于記錄多線程請(qǐng)求系統(tǒng)在運(yùn)行過(guò)程中的應(yīng)用日志,具體包括有:線程池狀態(tài),每當(dāng)有線程執(zhí)行完畢或新加入時(shí),就記錄當(dāng)前線程池的狀態(tài);單個(gè)請(qǐng)求執(zhí)行時(shí)間,當(dāng)一個(gè)服務(wù)請(qǐng)求發(fā)出后,會(huì)記錄下此請(qǐng)求的執(zhí)行時(shí)長(zhǎng)及排隊(duì)等待時(shí)長(zhǎng);請(qǐng)求組執(zhí)行時(shí)間,即記錄一組請(qǐng)求的總執(zhí)行時(shí)長(zhǎng),排隊(duì)時(shí)長(zhǎng)。
[0086]雖然以上描述了本發(fā)明的【具體實(shí)施方式】,但是本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,這些僅是舉例說(shuō)明,本發(fā)明的保護(hù)范圍是由所附權(quán)利要求書(shū)限定的。本領(lǐng)域的技術(shù)人員在不背離本發(fā)明的原理和實(shí)質(zhì)的前提下,可以對(duì)這些實(shí)施方式做出多種變更或修改,但這些變更和修改均落入本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種SOA架構(gòu)下的多線程請(qǐng)求方法,其特征在于,包括以下步驟: 51、接收至少一子系統(tǒng)發(fā)出的至少一組服務(wù)請(qǐng)求,將該至少一組服務(wù)請(qǐng)求的狀態(tài)分別記錄為執(zhí)行中; 52、在一線程池中創(chuàng)建至少一個(gè)線程,該至少一個(gè)線程和執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng),該至少一個(gè)線程進(jìn)入一等待隊(duì)列,該等待隊(duì)列用于按創(chuàng)建時(shí)間從早到晚的順序依次排列線程; 53、判斷該線程池中正在執(zhí)行的線程數(shù)量是否小于一最大并發(fā)數(shù),在判斷結(jié)果為否的情況下重復(fù)執(zhí)行S3,在判斷結(jié)果為是的情況下執(zhí)行S4 ; 54、順序依次選取該等待隊(duì)列中的線程并執(zhí)行,以使得正在執(zhí)行的線程數(shù)量等于該最大并發(fā)數(shù); 55、判斷是否有任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程已全部從該線程池中移除,在判斷結(jié)果為否的情況下執(zhí)行S3,在判斷結(jié)果為是的情況下執(zhí)行S6 ; 56、將該任意一組或多組的服務(wù)請(qǐng)求的狀態(tài)更改為執(zhí)行完畢; 57、將該任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程執(zhí)行的結(jié)果分別返回至發(fā)出該任意一組或多組的服務(wù)請(qǐng)求的子系統(tǒng),并執(zhí)行s3。
2.如權(quán)利要求1所述的多線程請(qǐng)求方法,其特征在于,每一組服務(wù)請(qǐng)求均包含了請(qǐng)求用戶的信息,在執(zhí)行S1后執(zhí)行以下步驟: Sn、判斷該至少一組服務(wù)請(qǐng)求的請(qǐng)求用戶中,是否有一個(gè)或多個(gè)請(qǐng)求用戶創(chuàng)建的、執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求對(duì)應(yīng)的線程數(shù)量達(dá)到該一個(gè)或多個(gè)請(qǐng)求用戶的線程閾值,在判斷結(jié)果為否的情況下執(zhí)行S2,在判斷結(jié)果為是的情況下執(zhí)行S12 ; S12、將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的一組或多組服務(wù)請(qǐng)求更改為延遲執(zhí)行狀態(tài),并執(zhí)行S2 ; S6和S7之間還包括以下步驟: 561、對(duì)于該一個(gè)或多個(gè)請(qǐng)求用戶,判斷其創(chuàng)建的、執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求對(duì)應(yīng)的線程數(shù)量是否小于其線程閾值,并在判斷結(jié)果為是的情況下將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的、并處于延遲執(zhí)行狀態(tài)的服務(wù)請(qǐng)求更改為執(zhí)行中狀態(tài); 562、在該線程池中創(chuàng)建和S61中更改為執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng)的線程,創(chuàng)建的線程進(jìn)入該等待隊(duì)列,并執(zhí)行S7。
3.如權(quán)利要求1所述的多線程請(qǐng)求方法,其特征在于,S3包括以下步驟: 531、若該線程池中的線程數(shù)量小于一最小線程數(shù),創(chuàng)建空線程以使得線程數(shù)量等于該最小線程數(shù); 532、判斷該線程池中正在執(zhí)行的線程數(shù)量是否小于一最大并發(fā)數(shù),在判斷結(jié)果為否的情況下等待,在判斷結(jié)果為是的情況下執(zhí)行S4。
4.如權(quán)利要求1-3中任意一項(xiàng)所述的多線程請(qǐng)求方法,其特征在于,每個(gè)步驟中均包括: 記錄每一組服務(wù)請(qǐng)求的狀態(tài)及對(duì)應(yīng)時(shí)刻,并記錄該線程池的狀態(tài)。
5.一種SOA架構(gòu)下的多線程請(qǐng)求系統(tǒng),包括一系統(tǒng)總線和至少一子系統(tǒng),該至少一子系統(tǒng)可相互發(fā)送服務(wù)請(qǐng)求,其特征在于,該多線程請(qǐng)求系統(tǒng)還包括: 一接收模塊,用于接收該至少一子系統(tǒng)發(fā)出的至少一組服務(wù)請(qǐng)求; 一線程創(chuàng)建模塊,用于在一線程池中創(chuàng)建至少一個(gè)線程、該至少一個(gè)線程和執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng),并將該至少一個(gè)線程放入一等待隊(duì)列、該等待隊(duì)列用于按創(chuàng)建時(shí)間從早到晚的順序依次排列線程; 一線程管理模塊,用于順序依次選取該等待隊(duì)列中的線程并執(zhí)行,以使得正在執(zhí)行的線程數(shù)量為小于或等于一最大并發(fā)數(shù)的最大值; 一狀態(tài)指示模塊,用于在該接收模塊接收該至少一組服務(wù)請(qǐng)求時(shí)將該至少一組服務(wù)請(qǐng)求的狀態(tài)記錄為執(zhí)行中,以及在任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程已全部從該線程池中移除時(shí)將該任意一組或多組服務(wù)請(qǐng)求的狀態(tài)更改為執(zhí)行完畢; 一結(jié)果返回模塊,用于將該任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程執(zhí)行的結(jié)果分別返回至發(fā)出該任意一組或多組的服務(wù)請(qǐng)求的子系統(tǒng)。
6.如權(quán)利要求5所述的多線程請(qǐng)求系統(tǒng),其特征在于,該多線程請(qǐng)求系統(tǒng)還包括一線程閾值維護(hù)模塊,該線程閾值維護(hù)模塊用于在有一個(gè)或多個(gè)請(qǐng)求用戶創(chuàng)建的正在執(zhí)行的線程數(shù)量達(dá)到該一個(gè)或多個(gè)請(qǐng)求用戶的線程閾值的情況下,將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的一組或多組服務(wù)請(qǐng)求更改為延遲執(zhí)行狀態(tài); 該結(jié)果返回模塊包括一延遲請(qǐng)求重啟單元、一線程新建單元和一返回單元,該延遲請(qǐng)求重啟單元用于判斷該一個(gè)或多個(gè)請(qǐng)求用戶創(chuàng)建的執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求對(duì)應(yīng)的線程數(shù)量是否小于其線程閾值,并在判斷結(jié)果為是的情況下將該一個(gè)或多個(gè)請(qǐng)求用戶發(fā)出的、并處于延遲執(zhí)行狀態(tài)的服務(wù)請(qǐng)求更改為執(zhí)行中狀態(tài); 該線程新建單元用于在該線程池中創(chuàng)建和該延遲請(qǐng)求重啟單元更改為執(zhí)行中狀態(tài)的服務(wù)請(qǐng)求一一對(duì)應(yīng)的線程,并將創(chuàng)建的線程放入該等待隊(duì)列; 該返回單元用于將該任意一組或多組的服務(wù)請(qǐng)求對(duì)應(yīng)的線程執(zhí)行的結(jié)果分別返回至發(fā)出該任意一組或多組的服務(wù)請(qǐng)求的子系統(tǒng)。
7.如權(quán)利要求5所述的多線程請(qǐng)求系統(tǒng),其特征在于,該線程管理模塊包括一最小線程數(shù)維護(hù)單元和一最大并發(fā)數(shù)維護(hù)單元,該最小線程數(shù)維護(hù)單元用于在該線程池中的線程數(shù)量小于一最小線程數(shù)時(shí)、創(chuàng)建空線程以使得線程數(shù)量等于該最小線程數(shù),該最大并發(fā)數(shù)維護(hù)單元用于順序依次選取該等待隊(duì)列中的線程并執(zhí)行、以使得正在執(zhí)行的線程數(shù)量為小于或等于該最大并發(fā)數(shù)的最大值。
8.如權(quán)利要求5-7中任意一項(xiàng)所述的多線程請(qǐng)求系統(tǒng),其特征在于,該多線程請(qǐng)求系統(tǒng)還包括一日志模塊,該日志模塊用于記錄每一組服務(wù)請(qǐng)求的狀態(tài)變化及對(duì)應(yīng)時(shí)刻、并實(shí)時(shí)記錄該線程池的狀態(tài)。
【文檔編號(hào)】H04L29/06GK104281489SQ201310293394
【公開(kāi)日】2015年1月14日 申請(qǐng)日期:2013年7月12日 優(yōu)先權(quán)日:2013年7月12日
【發(fā)明者】李偉 申請(qǐng)人:攜程計(jì)算機(jī)技術(shù)(上海)有限公司