欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種高并發(fā)平臺服務器的數(shù)據(jù)處理的方法

文檔序號:10552669閱讀:452來源:國知局
一種高并發(fā)平臺服務器的數(shù)據(jù)處理的方法
【專利摘要】本發(fā)明涉及對物聯(lián)網(wǎng)后臺服務器的數(shù)據(jù)的高并發(fā)處理。本發(fā)明將接收到字節(jié)型數(shù)據(jù)通過JNI接口發(fā)送給服務器內(nèi)置的動態(tài)連接庫的收發(fā)單元,由其將當前數(shù)據(jù)存入空閑數(shù)據(jù)緩沖區(qū)當填滿后,將其標記為飽和并空閑處理單元發(fā)送處理通知;對應處理單元讀取數(shù)據(jù)并將當前數(shù)據(jù)緩沖區(qū)鎖定,以及將自身狀態(tài)標記為忙;然后調(diào)用并行指令進行數(shù)據(jù)處理并將處理結果存入結果緩沖區(qū),處理完畢后,將當前數(shù)據(jù)緩沖區(qū)標記為空閑,以及將自身狀態(tài)標記為空閑;收發(fā)單元讀取處理結果,并通過JNI接口將其發(fā)送給服務器的物理量數(shù)據(jù)庫。本發(fā)明能顯著提高SSH架構的物聯(lián)網(wǎng)后臺服務器的數(shù)據(jù)處理能力,既使用了java語言的良好網(wǎng)絡能力,又利用了服務器CPU本身的處理能力。
【專利說明】
一種高并發(fā)平臺服務器的數(shù)據(jù)處理的方法
技術領域
[0001] 本發(fā)明涉及物聯(lián)網(wǎng)技術領域,具體涉及對物聯(lián)網(wǎng)后臺服務器的數(shù)據(jù)的高并發(fā)處 理。
【背景技術】
[0002] 目前,對于物聯(lián)網(wǎng)設備,人們普遍關心的是終端的采集和發(fā)送功能,由于終端的微 控制器處理能力比較弱,一般只做些簡單分析,后臺服務器由于有大量終端進行通信,它也 只是對數(shù)據(jù)進行處理后進行存儲,并以適當方式向用戶顯示。
[0003] 對于物聯(lián)網(wǎng)后臺服務器的架構,一般采用SSH(struts2+spring+hibernate)架構, 即利用java語言良好的網(wǎng)絡性能,實現(xiàn)對大量的連接進行高并發(fā)處理,即通過java語言所 編寫的網(wǎng)絡數(shù)據(jù)接口接收物聯(lián)網(wǎng)采集端發(fā)送的數(shù)據(jù)后,通過調(diào)動java語言的JVM( java虛擬 機)的相關函數(shù)對接收的字節(jié)型數(shù)據(jù)進行高并發(fā)處理并存入物聯(lián)網(wǎng)后臺服務器的預設物理 量數(shù)據(jù)庫中,得到能用于用戶顯示的處理結果。而物聯(lián)網(wǎng)采集端的數(shù)據(jù)一般的特點是采用 單字節(jié),雙字節(jié)或整型數(shù)表示物理量,當SSH架構的物聯(lián)網(wǎng)后臺服務器通過網(wǎng)絡數(shù)據(jù)接口接 收到物聯(lián)網(wǎng)采集端發(fā)送的數(shù)據(jù)后,需要將收到的字節(jié)型數(shù)據(jù)轉(zhuǎn)換成浮點數(shù),然后做浮點數(shù) 的系數(shù)乘法,最后基于偏移量的加法操作等數(shù)據(jù)處理才能變成真正的物理量(可直接用于 向用戶顯示),以雙字節(jié)為例,基于java語言實現(xiàn)對接收數(shù)據(jù)進行數(shù)據(jù)處理時,通過調(diào)動 java語言的JVM的相關函數(shù)實現(xiàn)轉(zhuǎn)換、系數(shù)相乘和偏移量處理得到物理量,即:
[0004] 物理量
*系數(shù)+偏移量
[0005] 對于java語言,它的優(yōu)勢在于跨平臺和網(wǎng)絡性能,但數(shù)據(jù)處理,尤其高并發(fā)數(shù)據(jù)處 理是其弱項,當涉及高并發(fā)數(shù)據(jù),大數(shù)據(jù)量到來時,其數(shù)據(jù)的處理更是系統(tǒng)的瓶頸。

【發(fā)明內(nèi)容】

[0006] 本發(fā)明的發(fā)明目的在于:為了克服采用SSH架構的物聯(lián)網(wǎng)后臺服務器在基于java 語言對接收數(shù)據(jù)進行數(shù)據(jù)處理,得到對應的真實物理量時,java語言的處理能力不足的技 術問題,提供一種高并發(fā)平臺服務器的數(shù)據(jù)處理的方法,既能使用java語言的良好網(wǎng)絡能 力,又能提高平臺服務器的處理能力。
[0007] 本發(fā)明的一種高并發(fā)平臺服務器的數(shù)據(jù)處理的方法,包括下列步驟:
[0008] 當SSH架構的物聯(lián)網(wǎng)后臺服務器通過網(wǎng)絡數(shù)據(jù)接口(由java語言編程實現(xiàn))接收到 物聯(lián)網(wǎng)采集端發(fā)送的數(shù)據(jù)后,將表示物理量的字節(jié)型數(shù)據(jù)通過JNI接口(Java Native Interface,java本地接口)發(fā)送給物聯(lián)網(wǎng)后臺服務器內(nèi)置的動態(tài)連接庫,優(yōu)選的,動態(tài)連接 庫基于C語言編程實現(xiàn);其中,動態(tài)鏈接庫包括收發(fā)單元、數(shù)據(jù)緩沖區(qū)、處理單元和結果緩沖 區(qū),且處理單元和數(shù)據(jù)緩沖區(qū)的初始狀態(tài)為空閑;
[0009] 收發(fā)單元通過JNI接口接收字節(jié)型數(shù)據(jù),并選擇狀態(tài)為空閑的數(shù)據(jù)緩沖區(qū)存入接 收的字節(jié)型數(shù)據(jù),同時將當前訪問的數(shù)據(jù)緩沖區(qū)鎖定,當數(shù)據(jù)填滿后,收發(fā)單元將當前訪問 的緩沖區(qū)標記為飽和,并向狀態(tài)為空閑的處理單元發(fā)送數(shù)據(jù)處理通知;
[0010] 收到數(shù)據(jù)處理通知的處理單元從狀態(tài)為飽和的數(shù)據(jù)緩沖區(qū)讀出數(shù)據(jù),并將當前訪 問的數(shù)據(jù)緩沖區(qū)鎖定,以及將自身狀態(tài)標記為忙;處理單元調(diào)用并行指令進行數(shù)據(jù)處理并 將處理結果存入結果緩沖區(qū);數(shù)據(jù)處理完畢后,將當前訪問的數(shù)據(jù)緩沖區(qū)標記為空閑,以及 將自身狀態(tài)標記為空閑;收發(fā)單元讀取結果緩沖區(qū)的處理結果,并通過JNI接口將處理結果 發(fā)送給物聯(lián)網(wǎng)后臺服務器的物理量數(shù)據(jù)庫。
[0011] 本發(fā)明的主要思想是把數(shù)據(jù)由單個處理變?yōu)槌膳幚?,將采用SSH架構的物聯(lián)網(wǎng) 后臺服務器的數(shù)據(jù)處理通過調(diào)用并行指令進行數(shù)據(jù)處理(如將字節(jié)型數(shù)據(jù)轉(zhuǎn)換成浮點數(shù), 對浮點數(shù)的系數(shù)相乘,基于偏移量的加法操作等),例如調(diào)用SIMD(匯編中的單指令多數(shù)據(jù)) 指令對接收的字節(jié)型數(shù)據(jù)進行數(shù)據(jù)處理。X86或X64架構是一款功能強大的處理器,Intel或 AMD的主流處理器都支持SSE(Streaming S頂D Extension,流式SHTO擴展)的指令集,因此 可以采用SSE指令完成對字節(jié)型數(shù)據(jù)的數(shù)據(jù)處理,從而顯著提高物聯(lián)網(wǎng)后臺服務器的數(shù)據(jù) 處理能力。以SSE指令為例,其涉及的數(shù)據(jù)處理的并行指令序列如下表所示:
[0013] 綜上所述,由于采用了上述技術方案,本發(fā)明的有益效果是:顯著提高SSH架構的 物聯(lián)網(wǎng)后臺服務器的數(shù)據(jù)處理能力,既使用了 java語言的良好網(wǎng)絡能力,又利用了服務器 CHJ本身的處理能力。
【具體實施方式】
[0014] 為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面結合實施方式,對本發(fā)明作進 一步地詳細描述。
[0015]首先,在采用SSH架構的物聯(lián)網(wǎng)后臺服務器(服務器使用X86或X64的平臺,能夠?qū)?大量的物聯(lián)網(wǎng)數(shù)據(jù)(字節(jié)型數(shù)據(jù))存入數(shù)據(jù)緩沖區(qū))中內(nèi)置由C語言編程實現(xiàn)的動態(tài)連接庫。 該動態(tài)連接庫包括1個收發(fā)單元、n個數(shù)據(jù)緩沖區(qū)(可基于當前處理對象實時調(diào)整數(shù)據(jù)緩沖 區(qū)的個數(shù))、m個處理單元(可以根據(jù)處理器個數(shù)調(diào)整)和1個結果緩沖區(qū)(隊列的形式,對處 理結果實行先進先出),且n>m>l。具體實現(xiàn)時,收發(fā)單元、處理單元以線程的方式實現(xiàn),為 了便于后續(xù)描述,將收發(fā)單元、處理單元用收發(fā)線程、處理線程來表述,其初始狀態(tài)均置為 空閑。
[0016]本發(fā)明中,網(wǎng)絡數(shù)據(jù)接口(基于java編程實現(xiàn))收到字節(jié)型數(shù)據(jù)后,并不直接處理, 而是通過JNI接口發(fā)給動態(tài)連接庫的收發(fā)線程,收發(fā)線程在狀態(tài)為空閑的數(shù)據(jù)緩沖區(qū)中隨 機選擇一個作為當前訪問數(shù)據(jù)緩沖區(qū),將當前接收的字節(jié)型數(shù)據(jù)存入當前訪問數(shù)據(jù)緩沖區(qū) 直到被飽和,此時將當前訪問數(shù)據(jù)緩沖區(qū)的狀態(tài)標記為飽和,同時向空閑狀態(tài)的處理線程 發(fā)送數(shù)據(jù)處理通知消息。在收發(fā)線程訪問一個數(shù)據(jù)緩沖區(qū)時,需將其鎖定,即除當前操作的 線程外,限制其他線程對當前訪問數(shù)據(jù)緩沖區(qū)的訪問。
[0017] 收到數(shù)據(jù)處理通知消息的處理線程,則首先對飽和狀態(tài)的數(shù)據(jù)緩沖區(qū)加鎖,禁止 其它線程訪問,然后調(diào)用并行指令處理,對于X86或X64平臺的服務器,可以使用MMX或SSE指 令來并行進行數(shù)據(jù)處理,數(shù)據(jù)處理完成后,將處理結果存入結果緩沖區(qū),并給當前數(shù)據(jù)緩沖 區(qū)解鎖,同時標記其狀態(tài)為空閑。
[0018] 最后,由收發(fā)線程將結果緩沖區(qū)的數(shù)據(jù)基于先進先出的讀取順序讀出并通過JNI 接口存入物聯(lián)網(wǎng)后臺服務器的物理量數(shù)據(jù)庫。
[0019] 在使用X86或64位平臺(物聯(lián)網(wǎng)后臺服務器)的SSE指令進行數(shù)據(jù)處理時,由于java 的跨平臺特性,SSH高并發(fā)架構可以是windows平臺也可以是linux平臺,而C語言編寫的動 態(tài)連接庫在windows下是dll格式,在linux下是so格式,其均能通過JNI接口供java層調(diào)用。 SSE指令可以是獨立的匯編文件也可以嵌入到C語言之中。指令的格式可以是intel格式也 可以是AT&T格式,取決于所使用的系統(tǒng)和編譯器。
[0020] 實施例
[0021] 以linux平臺為例,選用是64位Ubuntu,版本為12.04,開發(fā)工具為eclipse 4.3,C 語言編譯器用的是gCC(linux下的C編譯器),版本為4.8.4。數(shù)據(jù)處理對象以車聯(lián)網(wǎng)的CAN (Controller Area Network)總線為例,車載0BD終端(以下簡稱終端)將原始的CAN報文信 息發(fā)到物聯(lián)網(wǎng)后臺服務器(以下簡稱服務器),報文內(nèi)容符合SAE J1939-71協(xié)議,下表給出 了以發(fā)動機溫度和油壓兩條報文示例。
[0024] 在以上兩個報文中,每個報文有8個字節(jié),第一個報文中字節(jié)1和2分別為冷卻劑溫 度和燃料溫度,都為單字節(jié)表示的物理量,字節(jié)3和4為雙字節(jié)表示的發(fā)動機溫度。第二個報 文都是單字節(jié)表示的油壓。這兩個報文有8個字節(jié)需要處理。
[0025] 首先java中的minaServer( java中常用的網(wǎng)絡通信框架)通過NioSocketAcceptor ()方法創(chuàng)建一個非阻塞的物聯(lián)網(wǎng)后臺服務器端的socket,并調(diào)用bindO方法監(jiān)聽8011端口 接收車載終端的socket請求。
[0026]在Socket連接建立后,服務器的業(yè)務邏輯線程(服務器的現(xiàn)有處理線程)將接收到 的報文保存到阻塞隊列BlockingQueue〈Byte>中。
[0027] 服務器中的數(shù)據(jù)處理線程池中的消費者線程INFODeal(服務器的現(xiàn)有處理線程) 的實例獲取阻塞隊列中的報文數(shù)據(jù)并通過JNI接口調(diào)用動態(tài)鏈接庫進行數(shù)據(jù)解析。JNI模塊 中的交互類Datalnteract中的4個本地方法:
[0028] (1)數(shù)據(jù)傳遞:將數(shù)組buf (用于存放表示物理量的字節(jié)型數(shù)據(jù))傳遞給底層c語言 處理,即將字節(jié)型數(shù)據(jù)傳遞給基于C語言編程實現(xiàn)的動態(tài)鏈接庫;
[0029] (2)初始化:根據(jù)終端連接數(shù)(size)返回buffer長度,buffer的長度可調(diào);
[0030] (3)結果讀取:從結果緩沖區(qū)讀取處理結果;
[0031] (4)退出:服務器關閉時釋放底層分配的緩沖區(qū)空間。
[0032] 本實施例中,動態(tài)鏈接庫設置8個數(shù)據(jù)緩沖區(qū),6個處理線程,每個數(shù)據(jù)緩沖區(qū)有8 個單元隊列,每個單元隊列對應CAN報文中對應的字節(jié),各單元隊列的長度可自適應確定, 本實施例中將單元隊列的長度設置為4096,即各單元隊列中的數(shù)據(jù)由4096個字節(jié)組成,每 個字節(jié)所對應的終端記錄在預設數(shù)組中。通過JNI接口,對服務器通過網(wǎng)絡數(shù)據(jù)接口傳過來 的字節(jié)型數(shù)據(jù),由動態(tài)連接庫的接收線程將其依次存入各個對應的單元隊列中,當單元數(shù) 據(jù)達到4096時,接收線程標記該數(shù)據(jù)緩沖區(qū)的狀態(tài)為飽和,同時加鎖后通知狀態(tài)為空閑的 處理線程來處理。以處理發(fā)動機油溫的字節(jié)為例,將報文1的第3和4字節(jié)對應的單元隊列 (分別稱為canEE_3和canEE_4隊列)依次讀入SSE指令的XMM寄存器中,系數(shù)和偏移量也讀到 XMM寄存器中,然后啟動SSE指令進行數(shù)據(jù)處理。數(shù)據(jù)處理過程中,將canEE_3和canEF_4的4 個字節(jié)分別讀入寄存器單元xmmO和xmml中,然后用punpcklbw指令將其拼接成4個短整型 數(shù),再用punpcklwd指令將其擴展成4個整型數(shù),接著由cvtdq2ps指令轉(zhuǎn)換成浮點數(shù),最后進 行浮點數(shù)乘法和加法操作。
[0033] 完成一次4個字節(jié)型數(shù)據(jù)的數(shù)據(jù)處理后,可循環(huán)向xmmO和xmml中讀入,直到單元隊 列中的字節(jié)型數(shù)據(jù)處理完畢。
[0034]對于單字節(jié)物理量,可以將xmml清空,然后操作方式同上述方式一致;對于整型數(shù) 物理量,須將高16位數(shù)據(jù)按照上述方式拼接后,再使用punpcklwd指令與低16位拼接,其余 操作都是一樣。
[0035]數(shù)據(jù)處理后的處理結果存放在結果緩沖區(qū),等待java函數(shù)來取,即通過JNI接口將 處理結果讀取到物理數(shù)據(jù)庫中。
[0036]性能比較:
[0037] 服務器配置為:CPU(AMD Athon 4核)、內(nèi)存(8G)、操作系統(tǒng)(Ubuntu 12.04)、應用 軟件(t〇mcat7.0)。在進行數(shù)據(jù)處理時,共選取15-20條CAN報文,平均每個終端每秒發(fā)送132 個字節(jié)的數(shù)據(jù),在模擬多個終端測試時,性能對比如下:
[0039] 從上表可知,當終端數(shù)超過2000以后,使用純java方式的CPU的使用率維持在20% 左右,但此時丟包嚴重,很多數(shù)據(jù)沒有來的及處理。因此若只采用java方式處理,則當終端 數(shù)超過2000個時,系統(tǒng)就開始出現(xiàn)丟包情況,但CPU的利用率卻只停留在20 %左右,這是因 為java中的浮點數(shù)運算要通過java虛擬機來做,要調(diào)用大量其它資源,造成CPU的較長時間 的等待,而且多核的功能沒有發(fā)揮出來。而發(fā)明的方案中,java只負責網(wǎng)絡接收,數(shù)據(jù)處理 由C+SSE指令完成,同時設置有多個數(shù)據(jù)緩沖區(qū),并分配了多處理線程來執(zhí)行對字節(jié)型數(shù)據(jù) 的數(shù)據(jù)處理,可以充分使用CPU的功能,即使終端數(shù)目達到10000,系統(tǒng)依然能夠處理。同時, 本發(fā)明的方案還有較強的擴展能力,如果終端太多處理不過來,則可以增加 CHJ的核數(shù)或個 數(shù),增大數(shù)據(jù)緩沖區(qū)來完成,可以根據(jù)核數(shù)分配多個處理線程進行數(shù)據(jù)處理,充分利用系統(tǒng) 的性能。
[0040] 以上所述,僅為本發(fā)明的【具體實施方式】,本說明書中所公開的任一特征,除非特別 敘述,均可被其他等效或具有類似目的的替代特征加以替換;所公開的所有特征、或所有方 法或過程中的步驟,除了互相排斥的特征和/或步驟以外,均可以任何方式組合。
【主權項】
1. 一種高并發(fā)平臺服務器的數(shù)據(jù)處理的方法,其特征在于,包括下列步驟: 當SSH架構的物聯(lián)網(wǎng)后臺服務器通過網(wǎng)絡數(shù)據(jù)接口接收到物聯(lián)網(wǎng)采集端發(fā)送的數(shù)據(jù) 后,將表示物理量的字節(jié)型數(shù)據(jù)通過JNI接口發(fā)送給物聯(lián)網(wǎng)后臺服務器內(nèi)置的動態(tài)連接庫; 所述動態(tài)鏈接庫包括:收發(fā)單元、數(shù)據(jù)緩沖區(qū)、處理單元和結果緩沖區(qū);其中,處理單元 和數(shù)據(jù)緩沖區(qū)的初始狀態(tài)為空閑; 收發(fā)單元通過JNI接口接收字節(jié)型數(shù)據(jù),并選擇狀態(tài)為空閑的數(shù)據(jù)緩沖區(qū)存入接收的 字節(jié)型數(shù)據(jù),同時將當前訪問的數(shù)據(jù)緩沖區(qū)鎖定,當數(shù)據(jù)填滿后,收發(fā)單元將當前訪問的緩 沖區(qū)標記為飽和,并向狀態(tài)為空閑的處理單元發(fā)送數(shù)據(jù)處理通知; 收到數(shù)據(jù)處理通知的處理單元從狀態(tài)為飽和的數(shù)據(jù)緩沖區(qū)讀出數(shù)據(jù),并將當前訪問的 數(shù)據(jù)緩沖區(qū)鎖定,以及將自身狀態(tài)標記為忙;處理單元調(diào)用并行指令進行數(shù)據(jù)處理并將處 理結果存入結果緩沖區(qū);數(shù)據(jù)處理完畢后,將當前訪問的數(shù)據(jù)緩沖區(qū)標記為空閑,以及將自 身狀態(tài)標記為空閑; 收發(fā)單元讀取結果緩沖區(qū)的處理結果,并通過JNI接口將處理結果發(fā)送給物聯(lián)網(wǎng)后臺 服務器的物理量數(shù)據(jù)庫。2. 如權利要求1所述的方法,其特征在于,所述動態(tài)連接庫基于C語言編程實現(xiàn)。3. 如權利要求1或2所述的方法,其特征在于,動態(tài)連接庫的處理單元通過調(diào)用匯編中 的單指令多數(shù)據(jù)S頂D指令執(zhí)行數(shù)據(jù)處理。
【文檔編號】G06F9/38GK105912306SQ201610225491
【公開日】2016年8月31日
【申請日】2016年4月12日
【發(fā)明人】魯曉軍
【申請人】電子科技大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
仪征市| 宜良县| 三河市| 赤城县| 定日县| 黑水县| 宜城市| 新龙县| 石城县| 黄大仙区| 景泰县| 枣阳市| 咸丰县| 会东县| 巴中市| 凤凰县| 长乐市| 苏尼特左旗| 安多县| 会东县| 花垣县| 石棉县| 军事| 奉贤区| 日土县| 涞源县| 滦平县| 泽库县| 正宁县| 曲周县| 类乌齐县| 兴仁县| 博罗县| 博爱县| 江华| 阿勒泰市| 翁源县| 青浦区| 五原县| 柳林县| 浙江省|