C++ 如何测量队列中每秒弹出/推送的速率?
如果我们假设我们有一个队列的典型实现(带有一个表示节点的链表、一个计数器、一个push方法和一个pop方法),那么测量列表中新项目的到达率和离开率的最佳方法是什么?我是否需要两个单独的线程,每个线程测量一个或两个速率 任何伪代码/想法都是最受欢迎的 (我只是很快写了这篇文章来帮助回答问题。为了简单起见,省略了模板)C++ 如何测量队列中每秒弹出/推送的速率?,c++,multithreading,c++11,queue,chrono,C++,Multithreading,C++11,Queue,Chrono,如果我们假设我们有一个队列的典型实现(带有一个表示节点的链表、一个计数器、一个push方法和一个pop方法),那么测量列表中新项目的到达率和离开率的最佳方法是什么?我是否需要两个单独的线程,每个线程测量一个或两个速率 任何伪代码/想法都是最受欢迎的 (我只是很快写了这篇文章来帮助回答问题。为了简单起见,省略了模板) 看起来很简单:您只需使用两个原子推送/弹出计数器,每个操作都会递增。然后使用一个每秒运行一次的线程,记录当前状态(或执行它想要的任何操作),并将计数器重置回0 您需要注意的唯一一件事
看起来很简单:您只需使用两个原子推送/弹出计数器,每个操作都会递增。然后使用一个每秒运行一次的线程,记录当前状态(或执行它想要的任何操作),并将计数器重置回0
您需要注意的唯一一件事是使用一个计时器来计算在函数中花费的时间,以确保您不会偏离1秒的间隔太远(如果您花费大量时间处理,您还应该复制两个计数器并在开始时重置它们).您可以使用一个提供函数调用计数的探查器,而不是修改代码。在给定的一段时间内,以您想要测量的工作量运行程序。@无论如何,我只有一个消费者生产者。
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;
}
};