我理解的Sentinel 時間窗統計

2021-10-19 10:08:46 字數 3476 閱讀 1636

引數:

如下圖所示,每個時間點都會歸屬於乙個時間視窗,即會將時間軸按照時間窗寬度windowlength進行劃分。每個時間窗都有乙個起始時間starttime

獲取某個時間的統計量

更新某個時間的統計量

上面的圖示是在整個時間軸上進行劃分的,有無窮多個時間窗。但是在具體實現上是不可能表示出無窮個時間窗的,所以實現時會使用乙個固定大小的時間窗陣列。採用復用/迴圈儲存時間窗的方式。依據:在某個時間點只需要統計某幾個時間窗的資料即可,而不需要知道所有時間窗的資料,所以只儲存需要的幾個時間窗

此時多了乙個引數samplecount,陣列的大小就是samplecount

關係:samplecount=intervallength / windowlength

更新某個時間點處的統計量:

獲取某個時間點的統計量

主要的幾個類:

幾個類之間的關係:

需要統計的量在metricevent這個列舉變數表示

public

enum metricevent

典型用法:

// 建立例項,兩個值:2-samplecount 1000-統計的區間大小

arraymetric =

newarraymtric(2

,1000);

// 增加某個統計量的值

arraymetric.

add***

(n);

// 獲取某個統計量的值

arraymetric.

***(

)

當要使用時間窗進行統計時,對外提供的就是arraymetric。它隱藏了具體的時間窗的實現。

它有乙個成員變數:data=leaparray即底層的時間窗實現類。

在某個時間點需要增加某個統計量的值,就呼叫add***型別的api

在某個時間點需要獲取某個統計量的值,就呼叫***()型別的api

主要分析兩個操作:

首先是時間窗輪轉陣列leaparray,它是整個時間窗元件的主類。

public

abstract

class

leaparray

}

2.3.1 更新當前時間點某個統計量

呼叫arraymetricadd***()方法,這裡以addpass()為例。

public

void

addpass

(int count)

leaparraycurrentwindow()方法,此方法很重要會更新陣列各個位置的時間窗為最新的時間窗,更新即重置時間窗的起始時間以及將裡面的統計量進行歸零。

public windowwrap

currentwindow()

public windowwrap

currentwindow

(long timemillis)

// 計算當前時間對應的時間窗在陣列中的位置:

////private int calculatetimeidx(/*@valid*/ long timemillis)

int idx =

calculatetimeidx

(timemillis)

;// calculate current bucket start time.

// 計算時間窗的起始時間

// protected long calculatewindowstart(/*@valid*/ long timemillis)

long windowstart =

calculatewindowstart

(timemillis)

;while

(true

)else

// 如果時間窗的起始時間與當前時間所屬時間窗的起始時間相等,那麼就直接返回此時間窗

}else

if(windowstart == old.

windowstart()

)else

if(windowstart > old.

windowstart()

)finally

}else

}else

if(windowstart < old.

windowstart())}}

2.3.2 獲取某個統計值

呼叫arraymetric的***()方法

public

long

pass()

return pass;

}

leaparrayvalues()方法

public list

values()

public list

values

(long timemillis)

int size = array.

length()

;// 初始化

list

result =

newarraylist

(size)

;// 遍歷時間窗陣列,獲取每乙個元素

for(

int i =

0; i < size; i++

)// 在這裡真正的加入值

result.

add(windowwrap.

value()

);}return result;

}關鍵點:

public

boolean

iswindowdeprecated

(long time, windowwrap

windowwrap)

我對建立時間和保持時間的理解

這篇文章主要是談談我對建立時間和保持時間的理解,文中前四張是引用特權同學 fpga實戰演練邏輯篇51 建立時間和保持時間 出處 中國電子技術論壇 一書。我將以這四張及其延伸為例,進行推導。先說一下建立時間和保持時間的定義。定義都是一致,無異議的,即 建立時間 tsu 是指在時鐘上公升沿到來之前資料必...

matlab窗函式的頻譜 如何理解頻譜洩露?

這只是我個人的理解,錯誤之處還請指正。如果原始訊號中有頻率成分處於兩個基本函式的頻率之間,會怎麼樣呢?fig.1 a 解釋了答案,原始訊號包含兩路不同頻率的正弦波,一路頻率與基本函式匹配,一路頻率不匹配。前者用乙個點就能表示峰值,而後者則會出現乙個峰值伴隨著兩個尾巴的頻譜,即發生了譜洩露 拖尾 可以...

我理解的遞迴

1.在遞迴呼叫工作棧建立之後,各層遞迴所涉及到的變數都已經壓入到棧中,每次呼叫一次函式,系統記憶體機制就會以棧的方式分配該遞迴函式所需的記憶體空間,同時,每層函式得出的結果會暫時儲存在這個棧的空間中 2.當整個遞迴函式在遇到已if 為標誌的條件結束標誌的時候,函式不需要繼續執行該函式,系統停止記憶體...