簡體   English   中英

如何測量隊列中每秒彈出/推入的速率?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM