所以我用boost::lockfree::queue写了一个多线程程序,代码和给定的例子差不多 http://www.boost.org/doc/libs/1_62_0/doc/html/lockfree/examples.html .嗯,我有 4 个队列,数据是结构而不是 int。
问题是我的程序在运行时占用了 95% 的 CPU,而且速度非常慢。经过一些调查,我发现 boost::lockfree::queue::pop 占用了 80% 的 cpu 使用率,这并不奇怪,因为这两个循环
while (!done) {
while (queue.pop(value))
++consumer_count;
}
我可以做些什么来减少 CPU 使用率,还是应该升级我的 CPU?我在 Windows 10 上使用 boost 1.61,visual studio 2015,顺便说一下。
非常感谢
最佳答案
你期待什么?下面这段代码和你的一样(吃CPU方面)
int counter = 0;
bool condition_1 = false;
bool condition_2 = false;
while(!condition_1) {
while(!condition_2) {
++counter;
condition_2 = true;
}
}
恕我直言,当轮询队列时,您需要的是某种通知机制(例如 condition_variable)。否则,不断轮询它,显然会吃掉 cpu。
关于c++ - boost::lockfree::queue 正在耗尽我的 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074748/