如何测量队列中每秒弹出/推送的速率?

时间:2014-01-13 00:56:55

标签: c++ multithreading c++11 queue chrono

如果我们假设我们有一个典型的队列实现(使用表示节点的链表,计数器,推送方法和弹出方法),那么测量到达率和速率的最佳方法是什么新物品离开清单?我需要两个单独的线程,每两个线程测量一个吗?

任何伪代码/想法都是最受欢迎的!

(我很快写了这篇文章以帮助解决任何问题。为简单起见,省略了模板)

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;
    }
};

1 个答案:

答案 0 :(得分:0)

看起来非常简单:您只需使用两个原子推/弹计数器,每个操作都会递增。然后使用一个每秒运行一次的线程,记录当前状态(或用它做任何想做的事情)并将计数器重置为0.

你唯一需要注意的是使用计时器来计算你的功能所花费的时间,以确保你不会偏离1秒的间隔(你也应该复制两个计数器)如果您花费大量时间处理,请在开始时重置它们。)