• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      時(shí)序數(shù)據(jù)流場(chǎng)景下的高效時(shí)間轉(zhuǎn)化算法

      2021-03-15 07:01:33孫景樂(lè)王成華
      電腦知識(shí)與技術(shù) 2021年3期
      關(guān)鍵詞:系統(tǒng)

      孫景樂(lè) 王成華

      摘要:該文針對(duì)時(shí)序數(shù)據(jù)的特點(diǎn)提出一種高效的時(shí)間轉(zhuǎn)化為字符串格式的算法,該文算法在時(shí)序數(shù)據(jù)場(chǎng)景下轉(zhuǎn)化效率是Linux系統(tǒng)API(strftime)的4倍以上,在極端非序列場(chǎng)景下也接近系統(tǒng)的API效率(0.986倍),綜合性能優(yōu)于系統(tǒng)API,在日常開(kāi)發(fā)過(guò)中可作為系統(tǒng)API的替代函數(shù)使用。

      關(guān)鍵詞:時(shí)序數(shù)據(jù);時(shí)間格式轉(zhuǎn)換;Linux? 系統(tǒng);API;strftime

      中圖分類號(hào):TP311? ? 文獻(xiàn)標(biāo)識(shí)碼:A

      文章編號(hào):1009-3044(2021)03-0127-02

      1前言

      在分散控制系統(tǒng)[1]以及其他監(jiān)測(cè)系統(tǒng)中,時(shí)間戳是監(jiān)測(cè)數(shù)據(jù)的重要屬性,且數(shù)據(jù)具有按照時(shí)間順序發(fā)生的特點(diǎn)[2-3]。Linux系統(tǒng)下,時(shí)間的完整格式一般由兩個(gè)32位的整數(shù)表示①,第一個(gè)整數(shù)表示距離1970年1月1日0時(shí)0分0秒的秒數(shù)[4],第二個(gè)整數(shù)表示相對(duì)于第一個(gè)數(shù)的微秒數(shù)。但是這種時(shí)間格式對(duì)于人類來(lái)說(shuō)不直觀,在存入歷史庫(kù)或在界面顯示數(shù)據(jù)時(shí),需要將整數(shù)格式的時(shí)間轉(zhuǎn)化為直觀的字符串格式。在Linux平臺(tái)下,系統(tǒng)API函數(shù)strftime[5]可以將時(shí)間轉(zhuǎn)化為字符串格式。雖然該函數(shù)已經(jīng)過(guò)充分優(yōu)化,具有較高的效率,但高頻率調(diào)用系統(tǒng)API函數(shù)會(huì)導(dǎo)致用戶CPU占用率和系統(tǒng)CPU占用率升高,極端情況下可達(dá)100%,導(dǎo)致系統(tǒng)不能正常運(yùn)行。本文利用strftime函數(shù),在轉(zhuǎn)化的機(jī)制上提出一種改進(jìn)的時(shí)間轉(zhuǎn)換算法,時(shí)序場(chǎng)景下效率可提高4倍多。

      2算法原理及實(shí)現(xiàn)邏輯

      該算法與時(shí)序數(shù)據(jù)時(shí)間戳的特點(diǎn)密切相關(guān),本算法充分利用了數(shù)據(jù)的時(shí)序性,并結(jié)合計(jì)算機(jī)數(shù)據(jù)處理的特性實(shí)現(xiàn)。

      2.1 軟件開(kāi)發(fā)過(guò)程的時(shí)間處理方法

      當(dāng)前主流的操作系統(tǒng)主要有Windows和Linux系統(tǒng),兩種操作系統(tǒng)提供的日期時(shí)間表示方法思路也非常類似,都是通過(guò)使用整數(shù)表示距離某個(gè)歷史特定時(shí)刻的100納秒數(shù)或秒數(shù)。當(dāng)在用戶界面顯示時(shí)間戳?xí)r,需要將時(shí)間的整數(shù)形式轉(zhuǎn)化為人類更容易理解的字符串格式,例如,“2020年6月10日 13:35:40.622”。Windows系統(tǒng)和Linux系統(tǒng)都提供從整數(shù)格式轉(zhuǎn)化為字符串格式的API函數(shù)。

      2.2 時(shí)序系統(tǒng)的特點(diǎn)

      在監(jiān)測(cè)系統(tǒng)中,監(jiān)測(cè)點(diǎn)數(shù)據(jù)一般都是按照時(shí)間順序周期采集,例如50毫秒采集一次或更長(zhǎng)的間隔采集一次,所以在一秒之內(nèi),時(shí)間戳的秒級(jí)時(shí)間數(shù)值不變,僅毫秒和微秒在變化。例如,當(dāng)前某監(jiān)測(cè)點(diǎn)在“2020-6-6 18:30:12.100秒采集一次數(shù)據(jù),后面每隔50毫秒采集一次數(shù)據(jù),在[“2020-6-6 18:30:12.000”, “2020-6-6 18:30:13.000”)之間時(shí)間戳的秒都是”2020-6-6 18:30:12”,變化的僅僅是毫秒級(jí)別的時(shí)間,所以不需要對(duì)每個(gè)時(shí)間戳都調(diào)用系統(tǒng)API對(duì)時(shí)間戳進(jìn)行轉(zhuǎn)化,可以充分前面的轉(zhuǎn)化結(jié)果,避免重復(fù)轉(zhuǎn)化,提高效率。特別在監(jiān)測(cè)點(diǎn)數(shù)高達(dá)數(shù)十萬(wàn),甚至數(shù)百萬(wàn)的大型系統(tǒng)中,一秒內(nèi)會(huì)產(chǎn)生大量的數(shù)據(jù),進(jìn)行時(shí)間格式轉(zhuǎn)化的頻率非常高。

      2.3? 高效算法的基本思路

      根據(jù)時(shí)序數(shù)據(jù)的時(shí)間戳特點(diǎn),提出了更高效的時(shí)間轉(zhuǎn)化算法,思路如下:

      1)分配緩存空間,存放最近n(一般為n=2即可)秒時(shí)間內(nèi)的轉(zhuǎn)化結(jié)果,存放數(shù)據(jù)包括秒數(shù)及對(duì)應(yīng)的時(shí)間字符串;

      2)針對(duì)當(dāng)前要處理的時(shí)間戳,先在緩存中查找是否已經(jīng)轉(zhuǎn)化過(guò)該時(shí)刻的秒數(shù)。如果已轉(zhuǎn)化,則直接利用轉(zhuǎn)化好的字符串與時(shí)間戳中小于秒的部分(毫秒或微秒等)進(jìn)行字符串拼接,得到一個(gè)完整的字符串格式的時(shí)間戳;如果找不到,則調(diào)用系統(tǒng)API進(jìn)行格式轉(zhuǎn)化,并將轉(zhuǎn)化結(jié)果替換掉緩存中最舊的轉(zhuǎn)化結(jié)果,然后拼接毫秒和微秒部分的字符串,最后輸出完整的時(shí)間字符串格式,算法的流程圖如圖1所示。

      2.4 極端情況下的本文算法效率分析

      該算法是根據(jù)時(shí)序數(shù)據(jù)的特點(diǎn)提出的,所以針對(duì)時(shí)序數(shù)據(jù)會(huì)有較高的效率。如果在極端非時(shí)序數(shù)據(jù)情況下,則需要對(duì)該算法的效率進(jìn)行分析。所謂極端情況,即任意相鄰兩次的時(shí)間差都大于緩沖次數(shù)n,在緩沖區(qū)中不能找到已有轉(zhuǎn)化,所以每次轉(zhuǎn)化都需要調(diào)用系統(tǒng)API進(jìn)行轉(zhuǎn)換。此時(shí),本文算法的效率就退化為比直接調(diào)用系統(tǒng)API效率略低的算法。之所以比系統(tǒng)API效率低是因?yàn)榭焖偎惴ū戎苯诱{(diào)用系統(tǒng)API多執(zhí)行了在緩沖區(qū)查找轉(zhuǎn)化結(jié)果的過(guò)程。由于緩沖區(qū)次數(shù)n一般為2,所以查找時(shí)間非常短,所以即使在極端情況下,快速算法的效率也接近系統(tǒng)API的效率,后面的實(shí)驗(yàn)數(shù)據(jù)也充分驗(yàn)證了這一點(diǎn)。

      4性能驗(yàn)證

      4.1實(shí)驗(yàn)方案

      實(shí)驗(yàn)方案分為兩部分:一種是在時(shí)序數(shù)據(jù)環(huán)境下進(jìn)行效率對(duì)比,另一種是在極端情況下進(jìn)行效率對(duì)比。

      1)時(shí)序數(shù)據(jù)場(chǎng)景下對(duì)比

      因?yàn)樵撍惴ㄊ桥c數(shù)據(jù)的時(shí)序性密切相關(guān)的,所以實(shí)驗(yàn)過(guò)程中數(shù)據(jù)的變化也模擬了時(shí)序系統(tǒng)的特點(diǎn)。給定一個(gè)時(shí)間初始值t0(由秒和微秒兩部分組成),每間隔1秒,t0中的秒部分增加1秒,微秒的數(shù)值部分每執(zhí)行一次轉(zhuǎn)化后都會(huì)發(fā)生變化。

      2)極端非時(shí)序場(chǎng)景下對(duì)比

      該情況下時(shí)間的秒數(shù)采用隨機(jī)產(chǎn)生的方法,新的時(shí)間能在緩存中找到的概率非常低,幾乎每次都需要調(diào)用系統(tǒng)API函數(shù)進(jìn)行轉(zhuǎn)化。

      4.2實(shí)驗(yàn)環(huán)境

      實(shí)驗(yàn)環(huán)境是在VMWare虛擬機(jī)上的Linux操作系統(tǒng)(Ubuntu18),兩種算法都是在同一環(huán)境下比較,所以可以保證實(shí)驗(yàn)結(jié)果的客觀性。

      4.3實(shí)驗(yàn)結(jié)果

      實(shí)驗(yàn)中分別調(diào)用系統(tǒng)API和本文算法進(jìn)行時(shí)間格式轉(zhuǎn)化,在相同的運(yùn)行環(huán)境下分別運(yùn)行約10秒、20秒和30秒,統(tǒng)計(jì)兩個(gè)算法執(zhí)行時(shí)間轉(zhuǎn)化的次數(shù),計(jì)算每次的平均運(yùn)行速度,最后在計(jì)算綜合平均速度進(jìn)行比較,實(shí)驗(yàn)數(shù)據(jù)如表1所示。

      本文算法的三次綜合平均速度為:1036.5萬(wàn)次/秒,系統(tǒng)API算法的三次綜合平均速度為238.9萬(wàn)次/秒。實(shí)驗(yàn)數(shù)據(jù)表明,本文算法的運(yùn)行效率遠(yuǎn)遠(yuǎn)高于系統(tǒng)API算法的效率,大約是系統(tǒng)API算法的4.34倍。

      非時(shí)序情況下,本文算法平均計(jì)算速度為235.6萬(wàn)次/秒,是系統(tǒng)API效率的0.986倍,略低于系統(tǒng)API的效率。

      5 總結(jié)

      在具有時(shí)序特點(diǎn)的監(jiān)控系統(tǒng)場(chǎng)景下將時(shí)間格式轉(zhuǎn)化為字符串格式,本文算法的效率是系統(tǒng)API函數(shù)(strftime)的4倍多;在極端情況下,本文算法的效率是系統(tǒng)API算法效率的0.986倍,效率基本相同。所以,在日常開(kāi)發(fā)過(guò)程中,該快速算法完全可以用來(lái)替代直接調(diào)用系統(tǒng)API函數(shù)。

      注釋:

      不同的系統(tǒng)采用的時(shí)間機(jī)制不同,本文主要以Linux系統(tǒng)下的時(shí)間表示方法進(jìn)行敘述.

      參考文獻(xiàn):

      [1] 百度百科. 分散控制系統(tǒng)[EB/OL].[2020-08-04]. https://baike.baidu.com.

      [2] 王紅濤,王志超,陳峰,等.基于時(shí)序數(shù)據(jù)庫(kù)的工業(yè)大數(shù)據(jù)應(yīng)用研究[J].重型機(jī)械,2020(4):17-21.

      [3] 林志達(dá),張華兵,張今革.基于時(shí)序數(shù)據(jù)庫(kù)的監(jiān)控?cái)?shù)據(jù)存儲(chǔ)方法研究[J].電子元器件與信息技術(shù),2020,4(1):73-74,100.

      [4] 百度百科. unix時(shí)間戳[EB/OL].[2020-08-04]. https://baike.baidu.com.

      [5] 小丁木. linux中常用時(shí)間和字符串之間相互轉(zhuǎn)化[EB/OL]. (2017-07-11)[2020-07-04]. https://www.cnblogs.com/xiaodingmu/p/7152396.html.

      【通聯(lián)編輯:聞翔軍】

      猜你喜歡
      系統(tǒng)
      Smartflower POP 一體式光伏系統(tǒng)
      WJ-700無(wú)人機(jī)系統(tǒng)
      ZC系列無(wú)人機(jī)遙感系統(tǒng)
      基于PowerPC+FPGA顯示系統(tǒng)
      半沸制皂系統(tǒng)(下)
      連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
      乐业县| 璧山县| 临沭县| 隆昌县| 吕梁市| 永胜县| 呈贡县| 三亚市| 崇文区| 北川| 大埔县| 垦利县| 禄丰县| 睢宁县| 卓尼县| 通州市| 合江县| 姚安县| 都兰县| 疏附县| 宽城| 临城县| 定安县| 东城区| 兴隆县| 历史| 开化县| 旺苍县| 南乐县| 沈丘县| 成武县| 平顶山市| 商城县| 南康市| 呼和浩特市| 太仓市| 黄大仙区| 永靖县| 北安市| 宜兰县| 鄂托克前旗|