[英]How to measure the rate of popping/pushing per second in a queue?
如果我們假設隊列有一個典型的實現(用鏈表表示節點,計數器,推送方法和彈出方法),那么衡量到達率和離開率的最佳方法是什么?列表中有新項目? 我是否需要兩個單獨的線程,每個線程測量兩個?
任何偽代碼/想法都將受到歡迎!
(我只是很快寫了這篇文章,以幫助您解答所有問題。為簡化起見,省略了模板)
class my_queue{
public:
struct Node{
Node* next;
Node* previous;
int data;
}
Node* head;
Node* tail;
int queue_size;
my_queue(){}
int pop(){
Node* old_head = head;
Node* new_head = old_head->previous;
new_head->next = null;
head = new_head;
int data = old_head->data
delete old_head;
queue_size--;
return data;
}
void push(int data){
Node* new_tail = new Node();
new_node->data = data;
Node* old_tail = tail;
old_tail->previous = new_tail;
new_node->next = old_tail;
tail = new_tail;
queue_size++;
}
int getSize(){
return queue_size;
}
};
看起來很簡單:您只需使用兩個原子推/彈出計數器,每個操作都會增加這些計數器。 然后,您使用一個每秒運行一次的線程,記錄當前狀態(或執行其所需的任何操作)並將計數器重置為0。
您唯一需要注意的是使用一個計時器,該計時器要考慮您在函數中花費的時間,以確保您與1秒間隔的距離不會太遠(另外,您還應該復制兩個計數器並將其重置)首先,如果您花費大量時間進行處理)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.