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