專利名稱:一種基于接收與處理分離的海量數(shù)據(jù)并發(fā)性處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)處理方法,尤其涉及一種基于接收與處理分離的海量數(shù)據(jù)并發(fā)性處理方法,屬于計(jì)算機(jī)技術(shù)與通信領(lǐng)域。
背景技術(shù):
在基于TCP/IP的通信系統(tǒng)開發(fā)中,都要涉及到基于SOCKET技術(shù)進(jìn)行程序的開發(fā),基于SOCKET技術(shù)開發(fā),涉及客戶端發(fā)送數(shù)據(jù)與服務(wù)端接收數(shù)據(jù),而基于SOCKET技術(shù)服務(wù)端的實(shí)現(xiàn)流程如下
1.加載套接字
2.創(chuàng)建監(jiān)聽的套接字
3.綁定套接字
4.監(jiān)聽套接字
5.收到客戶端數(shù)據(jù),處理客戶端相關(guān)請(qǐng)求
在第5點(diǎn),服務(wù)端接收到客戶端數(shù)據(jù),一般產(chǎn)生一個(gè)線程,把接收到的數(shù)據(jù)傳給這個(gè)新線程進(jìn)行處理。由于基于windows、linux或Unix系統(tǒng)的soctet通信一次通信傳輸?shù)臄?shù)據(jù)缺省情況是8K字節(jié),因此在一次完整的業(yè)務(wù)過(guò)程中,如果客戶端傳輸給服務(wù)端的數(shù)據(jù)達(dá)到幾兆、幾十兆以及上百兆,那么客戶端將會(huì)對(duì)這些數(shù)據(jù)多次按順序分包發(fā)送,而服務(wù)端將會(huì)多次接收到客戶端基于同一個(gè)業(yè)務(wù)發(fā)過(guò)來(lái)的數(shù)據(jù),然后對(duì)傳過(guò)來(lái)的數(shù)據(jù)進(jìn)行組包,進(jìn)行處理,按照服務(wù)端接收客戶端數(shù)據(jù)然后產(chǎn)生一個(gè)線程對(duì)傳過(guò)來(lái)的數(shù)據(jù)進(jìn)行處理,這樣服務(wù)端將會(huì)在瞬間產(chǎn)生大量處理數(shù)據(jù)的線程,同時(shí)按照多線程的機(jī)制,服務(wù)端瞬間按順序產(chǎn)生了大量線程,但這些線程的執(zhí)行并不是按主線程產(chǎn)生子線程的順序執(zhí)行,同時(shí)產(chǎn)生的子線程也不是按先后順序依次執(zhí)行,而是按照調(diào)度無(wú)序并行執(zhí)行,這樣對(duì)基于同一業(yè)務(wù)的數(shù)據(jù)在服務(wù)端進(jìn)行組包將出現(xiàn)問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題在于克服現(xiàn)有技術(shù)的不足,提供一種基于接收與處理分離的海量數(shù)據(jù)并發(fā)性處理方法,能夠顯著提高系統(tǒng)對(duì)海量數(shù)據(jù)的傳輸效率以及數(shù)據(jù)并行處理、密集計(jì)算的能力。本發(fā)明具體采用以下技術(shù)方案解決上述技術(shù)問(wèn)題。一種基于接收與處理分離的海量數(shù)據(jù)并發(fā)性處理方法,服務(wù)端進(jìn)程啟動(dòng)時(shí),開啟至少一個(gè)數(shù)據(jù)處理線程和一個(gè)數(shù)據(jù)接收線程,同時(shí)開辟一段用于存儲(chǔ)接收到的客戶端數(shù)據(jù)的動(dòng)態(tài)存儲(chǔ)區(qū);數(shù)據(jù)接收線程通過(guò)socket偵聽并接收客戶端數(shù)據(jù),并把接收到的客戶端數(shù)據(jù)放入動(dòng)態(tài)存儲(chǔ)區(qū);數(shù)據(jù)處理線程對(duì)動(dòng)態(tài)存儲(chǔ)區(qū)進(jìn)行輪詢,如果動(dòng)態(tài)存儲(chǔ)區(qū)存在數(shù)據(jù),則從動(dòng)態(tài)存儲(chǔ)區(qū)中依次取出數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行判斷如果取得的數(shù)據(jù)是基于上一個(gè)數(shù)據(jù)包的數(shù)據(jù),則對(duì)數(shù)據(jù)進(jìn)行組包并判斷數(shù)據(jù)是否是基于上一個(gè)數(shù)據(jù)包的最后數(shù)據(jù),如果不是,則繼續(xù)從動(dòng)態(tài)存儲(chǔ)區(qū)中取數(shù)據(jù),直到取得的是基于同一個(gè)業(yè)務(wù)的最后一個(gè)數(shù)據(jù)包,則組包完成;將完整的基于同一業(yè)務(wù)的數(shù)據(jù)進(jìn)行后續(xù)的業(yè)務(wù)處理。本發(fā)明方法通過(guò)將數(shù)據(jù)接收與處理分離,解決了系統(tǒng)接收、處理數(shù)據(jù)的瓶頸;通過(guò)多線程輪詢,解決了接收后對(duì)數(shù)據(jù)按順序進(jìn)行組包的難題;本發(fā)明可顯著提高系統(tǒng)處理海量數(shù)據(jù)傳輸?shù)男室约皩?duì)海量數(shù)據(jù)的并行處理、密集計(jì)算的能力,并使系統(tǒng)穩(wěn)定性得以提聞。
圖I為本發(fā)明方法的原理示意 圖2為本發(fā)明方法的流程示意圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明
本發(fā)明的思路是通過(guò)數(shù)據(jù)接收與處理分離,解決系統(tǒng)接收、處理數(shù)據(jù)的瓶頸;通過(guò)多線程輪詢,解決接收后對(duì)數(shù)據(jù)按順序進(jìn)行組包的難題。本發(fā)明的關(guān)鍵在于數(shù)據(jù)接收和處理的分離,即服務(wù)端進(jìn)程啟動(dòng)時(shí),開啟至少一個(gè)數(shù)據(jù)處理線程和一個(gè)數(shù)據(jù)接收線程,并開辟一片動(dòng)態(tài)存儲(chǔ)區(qū)。本發(fā)明方法的原理如圖I所示。本發(fā)明方法,如圖2所示,具體包括以下步驟
步驟I、服務(wù)端進(jìn)程啟動(dòng)時(shí),開啟M(M表示多個(gè),可以根據(jù)業(yè)務(wù)處理數(shù)據(jù)量大小以及服務(wù)器性能進(jìn)行配置)個(gè)數(shù)據(jù)處理線程D,開啟一個(gè)數(shù)據(jù)接收線程R,同時(shí)在程序中開辟一段用于存儲(chǔ)接收到的客戶端數(shù)據(jù)的動(dòng)態(tài)存儲(chǔ)區(qū)S,并按照FIFO方式管理動(dòng)態(tài)存儲(chǔ)區(qū)S ;
步驟2、數(shù)據(jù)接收線程R通過(guò)socket偵聽并接收客戶端傳過(guò)來(lái)的數(shù)據(jù),直接把數(shù)據(jù)放入數(shù)據(jù)存儲(chǔ)區(qū)S,立即返回繼續(xù)偵聽接收客戶端數(shù)據(jù);
步驟3、數(shù)據(jù)處理線程D對(duì)動(dòng)態(tài)存儲(chǔ)區(qū)S進(jìn)行輪詢,如果動(dòng)態(tài)存儲(chǔ)區(qū)S存在數(shù)據(jù),則從動(dòng)態(tài)存儲(chǔ)區(qū)S中依次取出數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行判斷如果取得的數(shù)據(jù)是基于上一個(gè)數(shù)據(jù)包的數(shù)據(jù),則對(duì)數(shù)據(jù)進(jìn)行組包并判斷數(shù)據(jù)是否是基于上一個(gè)包的最后數(shù)據(jù),如果不是,則繼續(xù)從動(dòng)態(tài)存儲(chǔ)區(qū)S中取數(shù)據(jù),直到取得的是基于同一個(gè)業(yè)務(wù)的最后一個(gè)數(shù)據(jù)包,則組包完成;
步驟4、對(duì)完成組包的完整的基于同一業(yè)務(wù)的數(shù)據(jù)進(jìn)行后續(xù)的業(yè)務(wù)處理。至此,即完成了本發(fā)明的基于接收與處理分離的海量數(shù)據(jù)并發(fā)性處理過(guò)程。本發(fā)明在服務(wù)端進(jìn)程啟動(dòng)時(shí)開啟多個(gè)線程,并對(duì)這些線程進(jìn)行邏輯上的分類,分為數(shù)據(jù)接收線程與數(shù)據(jù)處理線程,同時(shí)開辟一段動(dòng)態(tài)存儲(chǔ)區(qū),通過(guò)動(dòng)態(tài)存儲(chǔ)區(qū)對(duì)數(shù)據(jù)接收線程與數(shù)據(jù)處理線程進(jìn)行關(guān)聯(lián),數(shù)據(jù)接收線程只負(fù)責(zé)接收數(shù)據(jù),然后把數(shù)據(jù)放入動(dòng)態(tài)存儲(chǔ)區(qū),這樣能夠顯著提高數(shù)據(jù)終端的接入量以及接入效率,顯著提高單位時(shí)間終端接入數(shù)量;數(shù)據(jù)接收線程根據(jù)業(yè)務(wù)處理需要進(jìn)行動(dòng)態(tài)配置,以滿足不同應(yīng)用系統(tǒng)的數(shù)據(jù)處理要求;數(shù)據(jù)處理線程對(duì)動(dòng)態(tài)存儲(chǔ)區(qū)進(jìn)行輪詢并獲取數(shù)據(jù)進(jìn)行處理,這樣多個(gè)數(shù)據(jù)處理線程并行處理,進(jìn)行數(shù)據(jù)密集型計(jì)算、數(shù)據(jù)并行計(jì)算,顯著提高海量數(shù)據(jù)處理能力
本發(fā)明方法邏輯清晰,數(shù)據(jù)接收與處理分離,解決了系統(tǒng)接收、處理數(shù)據(jù)的瓶頸,通過(guò)多線程輪詢,解決了接收后對(duì)數(shù)據(jù)按順序進(jìn)行組包的難題,顯著提高了系統(tǒng)處理海量數(shù)據(jù)傳輸?shù)男室约皩?duì)海量數(shù)據(jù)的并行處理、密集計(jì)算的能力,并使系統(tǒng)穩(wěn)定性得以提高。
權(quán)利要求
1.一種基于接收與處理分離的海量數(shù)據(jù)并發(fā)性處理方法,其特征在于,服務(wù)端進(jìn)程啟動(dòng)時(shí),開啟至少一個(gè)數(shù)據(jù)處理線程和一個(gè)數(shù)據(jù)接收線程,同時(shí)開辟一段用于存儲(chǔ)接收到的客戶端數(shù)據(jù)的動(dòng)態(tài)存儲(chǔ)區(qū);數(shù)據(jù)接收線程通過(guò)socket偵聽并接收客戶端數(shù)據(jù),并把接收到的客戶端數(shù)據(jù)放入動(dòng)態(tài)存儲(chǔ)區(qū);數(shù)據(jù)處理線程對(duì)動(dòng)態(tài)存儲(chǔ)區(qū)進(jìn)行輪詢,如果動(dòng)態(tài)存儲(chǔ)區(qū)存在數(shù)據(jù),則從動(dòng)態(tài)存儲(chǔ)區(qū)中依次取出數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行判斷如果取得的數(shù)據(jù)是基于上一個(gè)數(shù)據(jù)包的數(shù)據(jù),則對(duì)數(shù)據(jù)進(jìn)行組包并判斷數(shù)據(jù)是否是基于上一個(gè)數(shù)據(jù)包的最后數(shù)據(jù),如果不是,則繼續(xù)從動(dòng)態(tài)存儲(chǔ)區(qū)中取數(shù)據(jù),直到取得的是基于同一個(gè)業(yè)務(wù)的最后一個(gè)數(shù)據(jù)包, 則組包完成;將完整的基于同一業(yè)務(wù)的數(shù)據(jù)進(jìn)行后續(xù)的業(yè)務(wù)處理。
全文摘要
本發(fā)明公開了一種基于接收與處理分離的海量數(shù)據(jù)并發(fā)性處理方法。服務(wù)端進(jìn)程啟動(dòng)時(shí),開啟至少一個(gè)數(shù)據(jù)處理線程和一個(gè)數(shù)據(jù)接收線程,同時(shí)開辟一段動(dòng)態(tài)存儲(chǔ)區(qū);數(shù)據(jù)接收線程通過(guò)socket偵聽并接收客戶端數(shù)據(jù),并把數(shù)據(jù)放入動(dòng)態(tài)存儲(chǔ)區(qū);數(shù)據(jù)處理線程對(duì)動(dòng)態(tài)存儲(chǔ)區(qū)進(jìn)行輪詢,如果其中存在數(shù)據(jù),則從中依次取出數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行判斷如果是基于上一個(gè)數(shù)據(jù)包的數(shù)據(jù),則對(duì)數(shù)據(jù)進(jìn)行組包并判斷數(shù)據(jù)是否是基于上一個(gè)包的最后數(shù)據(jù),如果不是,則繼續(xù)從動(dòng)態(tài)存儲(chǔ)區(qū)中取數(shù)據(jù),直到取得的是基于同一個(gè)業(yè)務(wù)的最后一個(gè)數(shù)據(jù)包,則組包完成;將完整的基于同一業(yè)務(wù)的數(shù)據(jù)進(jìn)行后續(xù)業(yè)務(wù)處理。本發(fā)明可提高大數(shù)據(jù)量數(shù)據(jù)傳輸、數(shù)據(jù)密集型計(jì)算、并行計(jì)算的效率,提高系統(tǒng)穩(wěn)定性。
文檔編號(hào)G06F9/38GK102624889SQ20121005603
公開日2012年8月1日 申請(qǐng)日期2012年3月6日 優(yōu)先權(quán)日2012年3月6日
發(fā)明者周蕙, 彭建華, 徐立中 申請(qǐng)人:河海大學(xué)