專利名稱:一種實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)應(yīng)用服務(wù)器的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)應(yīng)用服務(wù)器的方法。
背景技術(shù):
計(jì)算機(jī)已經(jīng)日益成為生產(chǎn)和生活領(lǐng)域中不可或缺的工具,也在深刻的改變著人們的生活和工作方法。在計(jì)算機(jī)應(yīng)用領(lǐng)域中,應(yīng)用服務(wù)器技術(shù)隨著人們對(duì)于網(wǎng)絡(luò)系統(tǒng)的需求而迅速發(fā)展,一般情況下,應(yīng)用服務(wù)器有著強(qiáng)大的客戶機(jī)請(qǐng)求處理能力,服務(wù)器在合理時(shí)間之內(nèi)處理大量客戶機(jī)請(qǐng)求的能力取決于服務(wù)器使用I/O(輸入/輸出)流的效率。同時(shí)為成百上千個(gè)客戶機(jī)提供服務(wù)的服務(wù)器必須能夠并發(fā)地使用I/O服務(wù),隨著計(jì)算機(jī)系統(tǒng)Java平臺(tái)的發(fā)展,在Java語(yǔ)言開(kāi)發(fā)工具包JDK1.4中,已經(jīng)開(kāi)始支持異步(即非阻塞)I/O調(diào)用的功能,從而使得應(yīng)用服務(wù)器有了更大處理能力的可能。
目前應(yīng)用Java平臺(tái)的應(yīng)用服務(wù)器,由于較普遍地采用同步(阻塞)I/O機(jī)制,其線程與客戶機(jī)之比幾乎是一比一的關(guān)系,因而易于受到大量線程開(kāi)銷的影響,加上許多線程在一個(gè)耗時(shí)處理流程中很可能大部分時(shí)間都處于掛起狀態(tài),其結(jié)果是既導(dǎo)致了性能問(wèn)題又缺乏可伸縮性。為了解決這個(gè)問(wèn)題,Java平臺(tái)在其最新發(fā)展中支持了異步I/O,包括新的通道(Channel)類和選擇器(Selector)類,通道是客戶機(jī)和服務(wù)器之間的一種通信方式,選擇器則從不同客戶機(jī)捕獲各種事件并將它們分派到相應(yīng)的事件處理工具。
多線程技術(shù)主要解決處理器單元內(nèi)多個(gè)線程執(zhí)行的問(wèn)題,它不僅均衡了客戶機(jī)的等待響應(yīng)時(shí)間,簡(jiǎn)化了邏輯處理流程,而且可以顯著減少處理器單元的閑置時(shí)間,增加處理器單元的吞吐能力,并且非常適合服務(wù)器向多CPU的升級(jí)。但如果對(duì)多線程應(yīng)用不當(dāng),會(huì)增加對(duì)單個(gè)任務(wù)的處理時(shí)間。例如,在一臺(tái)服務(wù)器完成一項(xiàng)任務(wù)的時(shí)間為T=T1+T2+T3,其中T1是創(chuàng)建線程的時(shí)間,T2是在線程中執(zhí)行任務(wù)的時(shí)間(包括線程間同步所需時(shí)間),T3是線程銷毀的時(shí)間??梢钥闯?,T1、T3是多線程自身帶來(lái)的開(kāi)銷,在程序中頻繁地創(chuàng)建或銷毀線程,將導(dǎo)致T1和T3在T中占有相當(dāng)多比例,這顯然是更加突出了線程的弱點(diǎn)(T1、T3),而不是其并發(fā)性的優(yōu)點(diǎn)。
正是在這一背景下產(chǎn)生了計(jì)算機(jī)系統(tǒng)線程池技術(shù),計(jì)算機(jī)系統(tǒng)線程池技術(shù)著眼于如何縮短或調(diào)整T1、T3時(shí)間,從而提高服務(wù)器程序性能。它把T1、T3分別安排在服務(wù)器程序的啟動(dòng)和結(jié)束時(shí)間段或者一些空閑的時(shí)間段,這樣在服務(wù)器程序處理客戶請(qǐng)求時(shí),將不會(huì)發(fā)生T1、T3的開(kāi)銷,同時(shí)它還能夠顯著減少創(chuàng)建的線程數(shù)目。
可以看出,當(dāng)在單個(gè)任務(wù)一個(gè)流程中需要在多個(gè)套接字(SOCKET)接口(比如由一個(gè)TCP連接4元組構(gòu)成的一個(gè)套接字接口)上等待數(shù)據(jù)時(shí),為了減少并發(fā)線程的數(shù)量、提高CPU的利用率,通常采用異步I/O模式通過(guò)單線程來(lái)實(shí)現(xiàn)。當(dāng)單個(gè)任務(wù)邏輯簡(jiǎn)單,但其中包含耗時(shí)操作時(shí),同步I/O加計(jì)算機(jī)系統(tǒng)線程池是一個(gè)最佳選擇。
然而,當(dāng)一個(gè)大流量服務(wù)器對(duì)外有多個(gè)接口,而如果所處理的每個(gè)任務(wù)都被I/O操作分割為許多段,各個(gè)段內(nèi)又包含耗時(shí)操作(比如加解密、數(shù)據(jù)庫(kù)操作、XML解析封裝等),在所有段都順序完成后,才從入口處返回結(jié)果給客戶端。在這種情況下如果仍然采用同步I/O加計(jì)算機(jī)系統(tǒng)線程池,勢(shì)必會(huì)在接口處掛起很多線程,不能歸還到池中,從而導(dǎo)致效率低下的缺點(diǎn);如果僅采用異步I/O,則又無(wú)法解決主要由耗時(shí)操作引起的排隊(duì)問(wèn)題。目前普遍的解決方法是,底層采用異步I/O方式,在耗時(shí)操作段內(nèi)則開(kāi)啟一定數(shù)目的工作線程或進(jìn)程來(lái)處理。這樣將在較大程度上對(duì)系統(tǒng)性能有所改進(jìn),但仍存在諸多問(wèn)題首先,線程的數(shù)目是一個(gè)經(jīng)驗(yàn)值,在不同的環(huán)境下最佳取值是不易獲得的,尤其是如果在多個(gè)段內(nèi)使用線程,這些線程數(shù)目之間的協(xié)調(diào)更為困難(即實(shí)用性差),且實(shí)現(xiàn)時(shí)多使用配置文件的方式來(lái)修改,修改后可能需要重起系統(tǒng);其次,從底層讀寫數(shù)據(jù),在大流量時(shí)也是一個(gè)不容忽視的耗時(shí)耗CPU的系統(tǒng)拷貝操作,而如果放置到線程中(尤其對(duì)于多CPU的系統(tǒng)),則將很大程度的提升系統(tǒng)的性能;最后,系統(tǒng)設(shè)計(jì)時(shí)不僅要考慮不同接口,還需要將一段業(yè)務(wù)流程從“耗時(shí)”、“不耗時(shí)”這兩個(gè)角度進(jìn)行細(xì)分,從而使得系統(tǒng)的層次性和代碼復(fù)雜度、可維護(hù)性以及可二次開(kāi)發(fā)性都較差。
發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有技術(shù)存在的無(wú)法實(shí)現(xiàn)CPU占用率、代碼可維護(hù)度、以及實(shí)用性(如是否需要獲取經(jīng)驗(yàn)值等)的有效結(jié)合的缺點(diǎn),以期提出一種能夠充分利用各種I/O模式的長(zhǎng)處,在最大程度提高CPU占用率的基礎(chǔ)上,增強(qiáng)實(shí)用性和代碼的可維護(hù),降低系統(tǒng)復(fù)雜度的方法。
本發(fā)明的核心思想是通過(guò)結(jié)合使用計(jì)算機(jī)系統(tǒng)JAVA平臺(tái)中的異步I/O和計(jì)算機(jī)系統(tǒng)線程池技術(shù),構(gòu)造一種應(yīng)用服務(wù)器實(shí)現(xiàn)方法,將線程分為鏈路管理線程、接收線程、以及業(yè)務(wù)線程三種,其中后兩種使用的線程資源均來(lái)自計(jì)算機(jī)系統(tǒng)線程池;將任務(wù)以I/O操作為分界劃分為多個(gè)段,每個(gè)段均在上述線程中運(yùn)行;同時(shí)在處理簡(jiǎn)單的一次性發(fā)送任務(wù)時(shí),又采用同步I/O的方式。
本發(fā)明所述的實(shí)現(xiàn)在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)應(yīng)用服務(wù)器的方法,其特征在于,包括以下步驟(1)構(gòu)造計(jì)算機(jī)系統(tǒng)線程池,設(shè)置計(jì)算機(jī)系統(tǒng)線程池的最多和最少線程數(shù)、以及線程數(shù)達(dá)到最大值后的等待策略,具體在某一時(shí)刻需要使用到的線程數(shù)由計(jì)算機(jī)系統(tǒng)線程池自動(dòng)調(diào)節(jié);所述等待策略包括在調(diào)用線程中立即執(zhí)行、丟棄、調(diào)用線程掛起直到線程池中出現(xiàn)空閑線程后再執(zhí)行等。
(2)將應(yīng)用服務(wù)器中的線程分為鏈路管理線程、接收線程、以及業(yè)務(wù)線程;(a)鏈路管理線程通過(guò)維護(hù)一個(gè)異步I/O主循環(huán),接收外部連接請(qǐng)求;當(dāng)鏈路管理線程接收到某個(gè)鏈路上有數(shù)據(jù)到來(lái)的事件時(shí),從計(jì)算機(jī)系統(tǒng)線程池中調(diào)出一個(gè)空閑線程,通過(guò)傳遞給該線程的Runnable(java的線程基類)實(shí)例,使該空閑線程進(jìn)入工作狀態(tài),在該鏈路上進(jìn)行接收處理,從而轉(zhuǎn)變?yōu)榻邮站€程;(b)接收線程負(fù)責(zé)從傳輸層(SOCKET接口)讀取數(shù)據(jù),并將傳輸層數(shù)據(jù)分割或重組,最終將傳輸層數(shù)據(jù)轉(zhuǎn)換成應(yīng)用層的報(bào)文(如HTTP報(bào)文);當(dāng)收集到一或多個(gè)完整的應(yīng)用層報(bào)文后,接收線程從計(jì)算機(jī)系統(tǒng)線程池中調(diào)一或多個(gè)空閑線程進(jìn)行業(yè)務(wù)處理,并將接收線程自身歸還到計(jì)算機(jī)系統(tǒng)線程池中;(c)業(yè)務(wù)線程負(fù)責(zé)處理一個(gè)業(yè)務(wù)段,包括具體業(yè)務(wù)邏輯處理,以及從SOCKET接口發(fā)送數(shù)據(jù)等。
一個(gè)SOCKET接口在某一時(shí)刻只能對(duì)應(yīng)最多1個(gè)接收線程,或沒(méi)有對(duì)應(yīng)接受線程(接口上沒(méi)有接收數(shù)據(jù)時(shí))。每個(gè)業(yè)務(wù)線程負(fù)責(zé)處理一個(gè)業(yè)務(wù)段。
(3)將每個(gè)業(yè)務(wù)邏輯處理流程劃分成多個(gè)業(yè)務(wù)段,每段都由“接收”——“處理”——“發(fā)送”組成;“接收”在接收線程中進(jìn)行,“處理”和“發(fā)送”則在業(yè)務(wù)線程中完成,不需要考慮段中是否有耗時(shí)模塊;所述一個(gè)業(yè)務(wù)邏輯處理流程等同于一個(gè)任務(wù),比如一個(gè)定位邏輯流程包括解析、鑒權(quán)、短信、定位、計(jì)費(fèi)、告警等處理;(4)除需要長(zhǎng)期存在的總控線程和定時(shí)器線程外,其它的所有線程(如接收線程、和業(yè)務(wù)線程)均在計(jì)算機(jī)系統(tǒng)線程池中申請(qǐng),每接收完一次數(shù)據(jù)(接收線程)、或每處理完一個(gè)業(yè)務(wù)段(業(yè)務(wù)線程),該線程歸還到計(jì)算機(jī)系統(tǒng)線程池中,該鏈路或業(yè)務(wù)邏輯處理流程通過(guò)一個(gè)記載有狀態(tài)值的數(shù)據(jù)區(qū)(包含如TCP鏈路或業(yè)務(wù)邏輯處理的當(dāng)前狀態(tài)信息)保存在內(nèi)存中;(5)處理簡(jiǎn)單的發(fā)送任務(wù)(如HTTP短連接,一次交互后立即關(guān)閉)時(shí),采用同步I/O的方式。
本發(fā)明所述方法通過(guò)結(jié)合使用計(jì)算機(jī)系統(tǒng)JAVA平臺(tái)中的異步I/O和計(jì)算機(jī)系統(tǒng)線程池技術(shù),與現(xiàn)有的技術(shù)相比,在應(yīng)用服務(wù)器中,既不會(huì)在各SOCKET接口上存在掛起的線程,也不需要對(duì)各流程中耗時(shí)模塊作特殊考慮;同時(shí)因?yàn)橛?jì)算機(jī)系統(tǒng)線程池可以達(dá)到自動(dòng)調(diào)節(jié)的效果,不需要硬性地配置各模塊線程的數(shù)目;由于包括I/O操作都放在多線程中進(jìn)行,對(duì)于系統(tǒng)向多CPU的升級(jí),提供了最大性能提升空間。
圖1是JAVA平臺(tái)應(yīng)用服務(wù)器整體架構(gòu)示意圖。
圖2是服務(wù)器中各線程關(guān)系示意圖。
圖3是本發(fā)明所述方法流程圖。
圖4是作為本發(fā)明實(shí)施例的完整任務(wù)中任務(wù)段、鏈路、狀態(tài)關(guān)系圖。
圖5是作為本發(fā)明實(shí)施例的接收線程解析調(diào)用過(guò)程示意圖。
具體實(shí)施例方式
下面將結(jié)合附圖,舉例說(shuō)明在結(jié)合異步I/O和計(jì)算機(jī)系統(tǒng)線程池設(shè)計(jì)大流量應(yīng)用服務(wù)器的一個(gè)實(shí)施方式。
系統(tǒng)的整體構(gòu)架如圖1所示,圖中的異步I/O模塊占用鏈路管理線程,主要進(jìn)行SOCKET接口創(chuàng)建、監(jiān)聽(tīng)、以及開(kāi)啟接收線程等操作;計(jì)算機(jī)系統(tǒng)線程池主要維護(hù)一個(gè)空閑線程和接收、業(yè)務(wù)線程之間的轉(zhuǎn)換工作,并能夠根據(jù)系統(tǒng)的繁忙程度動(dòng)態(tài)調(diào)整計(jì)算機(jī)系統(tǒng)線程池中的線程數(shù);圖中在處理簡(jiǎn)單的發(fā)送任務(wù)(如HTTP短連接,一次交互后立即關(guān)閉)時(shí),還采用了同步I/O的方式。
服務(wù)器中各種線程之間的關(guān)系如圖2所示,計(jì)算機(jī)系統(tǒng)線程池中的空閑線程和接收線程、業(yè)務(wù)線程之間是相互轉(zhuǎn)化的。鏈路管理、定時(shí)器線程則占用固定的線程資源。
具體的實(shí)施方式首先需要進(jìn)行初始化準(zhǔn)備工作,主要完成三個(gè)任務(wù)1)創(chuàng)建一個(gè)計(jì)算機(jī)系統(tǒng)線程池,配置好計(jì)算機(jī)系統(tǒng)線程池的最多和最少線程數(shù)、以及線程數(shù)達(dá)到最大值后的等待策略。
2)設(shè)計(jì)一個(gè)鏈路管理線程和接收線程的接口,設(shè)計(jì)一個(gè)接收線程與業(yè)務(wù)處理線程的接口,兩個(gè)接口均繼承JAVA的Runnable接口。接收線程主要實(shí)現(xiàn)數(shù)據(jù)讀取、解碼、以及業(yè)務(wù)數(shù)據(jù)包的組裝。
3)將各業(yè)務(wù)流程根據(jù)“接收”、“處理”、“發(fā)送”,分割成不同的段,如圖3所示,圖中的一個(gè)邏輯處理流程被劃分為3個(gè)工作段,并使用狀態(tài)機(jī)為每段分配一個(gè)狀態(tài)值。圖4是為說(shuō)明一個(gè)完整業(yè)務(wù)邏輯流程中業(yè)務(wù)段、鏈路、狀態(tài)、及線程之間的關(guān)系圖的示意圖,業(yè)務(wù)邏輯流程從鏈路1接收到請(qǐng)求開(kāi)始,直到從鏈路1返回結(jié)果信息結(jié)束。不同業(yè)務(wù)流程使用不同內(nèi)存業(yè)務(wù)數(shù)據(jù)區(qū),數(shù)據(jù)區(qū)索引由業(yè)務(wù)而定。
接收線程在調(diào)用一或多個(gè)業(yè)務(wù)線程后,立即退出。即將線程歸還到計(jì)算機(jī)系統(tǒng)線程池中,將鏈路信息以及低層的應(yīng)用協(xié)議信息保存在內(nèi)存中的鏈路數(shù)據(jù)區(qū)中。如果一次讀操作解析出多個(gè)業(yè)務(wù)數(shù)據(jù)包,即從計(jì)算機(jī)系統(tǒng)線程池啟用多個(gè)業(yè)務(wù)線程處理(如圖5);如果沒(méi)有讀全一個(gè)業(yè)務(wù)數(shù)據(jù)包,在鏈路數(shù)據(jù)區(qū)中保存該段數(shù)據(jù),退還本線程,等待下次讀操作。
當(dāng)接收到一個(gè)數(shù)據(jù)包時(shí),引發(fā)以下事件1)鏈路管理線程根據(jù)事件號(hào)的不同進(jìn)行分別處理處理步驟如下a)如果是接入建鏈請(qǐng)求,則接受該請(qǐng)求,并為新建的套接字接口(簡(jiǎn)稱鏈路)分配一個(gè)鏈路數(shù)據(jù)區(qū)。
b)如果是鏈路上的數(shù)據(jù)包,則從計(jì)算機(jī)系統(tǒng)線程池中取出一個(gè)空閑線程作為接收線程,并在其中進(jìn)行讀取、解析、重組操作。鏈路管理線程則進(jìn)入新的循環(huán)中。為了簡(jiǎn)化流程,同時(shí)也可以提高效率,在鏈路管理線程中還需要作以下控制任一時(shí)刻任一鏈路上只能占用一個(gè)接收線程。
c)如果讀到一或多個(gè)完整的應(yīng)用協(xié)議包,在啟動(dòng)一或多個(gè)業(yè)務(wù)線程后,本接收線程被歸還到池中。
d)如果不是一個(gè)完整的應(yīng)用協(xié)議包,接收線程不啟動(dòng)業(yè)務(wù)線程,在將讀取進(jìn)度狀態(tài)保存到鏈路數(shù)據(jù)區(qū)后,本接收線程被歸還到池中。
2)業(yè)務(wù)處理線程根據(jù)當(dāng)前流程的狀態(tài),進(jìn)行本段業(yè)務(wù)處理,不管其中是否有耗時(shí)操作,因?yàn)槭窃讵?dú)立的線程中,故不需要做任何考慮。當(dāng)本段處理完成后,業(yè)務(wù)線程需要執(zhí)行以下幾步a)業(yè)務(wù)處理根據(jù)要發(fā)送的目的地的IP地址加端口號(hào)找到一條(或新建一條)鏈路并在本線程中完成(即保證發(fā)送完全成功),發(fā)送操作,如果發(fā)送不成功,需要在本線程中嘗試重發(fā)操作。
b)保存流程新的狀態(tài)到數(shù)據(jù)區(qū),歸還本線程到池中。
3)發(fā)送時(shí)經(jīng)常可能遇到鏈路上僅一次發(fā)送、不需等待響應(yīng)的操作,這時(shí)采用同步I/O能達(dá)到很大的簡(jiǎn)化作用。
本發(fā)明所述方法既不會(huì)在各SOCKET接口上存在掛起的線程,也不需要對(duì)各流程中耗時(shí)模塊作特殊考慮;同時(shí)因?yàn)橛?jì)算機(jī)系統(tǒng)線程池可以達(dá)到自動(dòng)調(diào)節(jié)的效果,不需要硬性地配置各模塊線程的數(shù)目;由于包括I/O操作都放在多線程中進(jìn)行,對(duì)于系統(tǒng)向多CPU的升級(jí),提供了最大性能提升空間。
以上所述的實(shí)施例只是本發(fā)明方法在java平臺(tái)上的一個(gè)實(shí)現(xiàn)性描述,而本發(fā)明方法所提出的服務(wù)器構(gòu)架思想則不僅限于java平臺(tái)。在不脫離本發(fā)明的實(shí)質(zhì)和范圍的情況下,所有的變化和修改都在本發(fā)明的范圍之內(nèi)。
權(quán)利要求
1.一種實(shí)現(xiàn)在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)應(yīng)用服務(wù)器的方法,其特征在于,包括以下步驟(1)構(gòu)造計(jì)算機(jī)系統(tǒng)線程池,設(shè)置計(jì)算機(jī)系統(tǒng)線程池的最多和最少線程數(shù)、以及線程數(shù)達(dá)到最大值后的等待策略,具體在某一時(shí)刻需要使用到的線程數(shù)由計(jì)算機(jī)系統(tǒng)線程池自動(dòng)調(diào)節(jié);(2)將應(yīng)用服務(wù)器中的線程分為鏈路管理線程、接收線程、以及業(yè)務(wù)線程;(3)將每個(gè)業(yè)務(wù)邏輯處理流程劃分成多個(gè)業(yè)務(wù)段,每段都由“接收”、“處理”、“發(fā)送”組成;(4)設(shè)置占用固定線程資源的總控線程和定時(shí)器線程;不占用固定線程資源的線程從計(jì)算機(jī)系統(tǒng)線程池中申請(qǐng)得到,在每接收完一次數(shù)據(jù)、或每處理完一個(gè)業(yè)務(wù)段,該線程歸還到計(jì)算機(jī)系統(tǒng)的線程池中,而線程數(shù)據(jù)通過(guò)一個(gè)記載有狀態(tài)值的數(shù)據(jù)區(qū)保存在內(nèi)存中;(5)計(jì)算機(jī)系統(tǒng)處理采用HTTP短連接的發(fā)送任務(wù)時(shí),采用同步I/O的方式。
2.如權(quán)利要求1所述的實(shí)現(xiàn)在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)應(yīng)用服務(wù)器的方法,其特征在于,步驟(1)中所述等待策略包括在調(diào)用線程中立即執(zhí)行、丟棄、調(diào)用線程掛起直到線程池中出現(xiàn)空閑線程后再執(zhí)行。
3.如權(quán)利要求1所述的實(shí)現(xiàn)在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)應(yīng)用服務(wù)器的方法,其特征在于,步驟(2)中所述三個(gè)線程具體包括(a)鏈路管理線程通過(guò)維護(hù)一個(gè)異步I/O主循環(huán),接收外部連接請(qǐng)求;當(dāng)鏈路管理線程接收到某個(gè)鏈路上有數(shù)據(jù)到來(lái)的事件時(shí),從計(jì)算機(jī)系統(tǒng)線程池中調(diào)出一個(gè)空閑線程,通過(guò)傳遞給該空閑線程的一個(gè)繼承自Runnable類的類實(shí)例,使空閑線程進(jìn)入工作狀態(tài),在該鏈路上進(jìn)行接收處理,從而轉(zhuǎn)變?yōu)榻邮站€程;(b)接收線程負(fù)責(zé)從傳輸層SOCKET接口讀取數(shù)據(jù),并將傳輸層數(shù)據(jù)分割或重組,最終將傳輸層數(shù)據(jù)轉(zhuǎn)換成應(yīng)用層的報(bào)文;當(dāng)收集到一或多個(gè)完整的應(yīng)用層報(bào)文后,接收線程從計(jì)算機(jī)系統(tǒng)線程池中調(diào)一或多個(gè)空閑線程進(jìn)行業(yè)務(wù)處理,并將接收線程自身歸還到線程池中;(c)業(yè)務(wù)線程負(fù)責(zé)處理一個(gè)業(yè)務(wù)段,包括具體業(yè)務(wù)邏輯處理,以及從SOCKET接口發(fā)送數(shù)據(jù)。
4.如權(quán)利要求3所述的實(shí)現(xiàn)在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)應(yīng)用服務(wù)器的方法,其特征在于,一個(gè)SOCKET接口在某一時(shí)刻只能對(duì)應(yīng)最多1個(gè)接收線程,在接口上沒(méi)有接收數(shù)據(jù)時(shí),則沒(méi)有對(duì)應(yīng)接收線程。
5.如權(quán)利要求3所述的實(shí)現(xiàn)在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)應(yīng)用服務(wù)器的方法,其特征在于,每個(gè)業(yè)務(wù)線程負(fù)責(zé)處理一個(gè)業(yè)務(wù)段。
6.如權(quán)利要求3所述的實(shí)現(xiàn)在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)應(yīng)用服務(wù)器的方法,其特征在于,步驟(b)中所述應(yīng)用層報(bào)文為HTTP報(bào)文。
7.如權(quán)利要求1或3所述的實(shí)現(xiàn)在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)應(yīng)用服務(wù)器的方法,其特征在于,步驟(3)中,“接收”在接收線程中進(jìn)行,“處理”和“發(fā)送”則在業(yè)務(wù)線程中完成;所述一個(gè)業(yè)務(wù)邏輯處理流程等同于一個(gè)任務(wù)。
全文摘要
本發(fā)明提出了一種計(jì)算機(jī)領(lǐng)域的實(shí)現(xiàn)在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)應(yīng)用服務(wù)器的方法,結(jié)合使用計(jì)算機(jī)系統(tǒng)JAVA平臺(tái)中的異步I/O和計(jì)算機(jī)系統(tǒng)線程池技術(shù),構(gòu)造計(jì)算機(jī)系統(tǒng)線程池,并將應(yīng)用服務(wù)器中的線程分為鏈路管理線程、接收線程、以及業(yè)務(wù)線程;將每個(gè)業(yè)務(wù)邏輯處理流程劃分成多個(gè)業(yè)務(wù)段,每段都由“接收”——“處理”——“發(fā)送”組成;除需要長(zhǎng)期存在的總控線程和定時(shí)器線程外,其它的所有線程均在計(jì)算機(jī)系統(tǒng)線程池中申請(qǐng),每接收完一次數(shù)據(jù)、或每處理完一個(gè)業(yè)務(wù)段,該線程歸還到計(jì)算機(jī)系統(tǒng)的線程池中,該鏈路或業(yè)務(wù)邏輯處理流程通過(guò)一個(gè)記載有狀態(tài)值的數(shù)據(jù)區(qū)保存在內(nèi)存中。本發(fā)明能夠充分利用各種I/O模式的長(zhǎng)處,在最大程度提高CPU占用率的基礎(chǔ)上,增強(qiáng)實(shí)用性和代碼的可維護(hù),降低系統(tǒng)復(fù)雜度。
文檔編號(hào)G06F9/46GK1584842SQ200410046278
公開(kāi)日2005年2月23日 申請(qǐng)日期2004年6月9日 優(yōu)先權(quán)日2004年6月9日
發(fā)明者張長(zhǎng)豐, 強(qiáng)宇紅, 鄭揚(yáng) 申請(qǐng)人:中興通訊股份有限公司