【发布时间】:2011-06-07 12:35:37
【问题描述】:
我创建了一个应用程序,它使用管道模式进行一些处理。 但是,我注意到当管道连续运行多次时,它往往会变得越来越慢。
在流水线阶段没有进行实际处理时也会出现这种情况 - 所以我很好奇我的流水线实现是否有问题。
这是一个重现效果的简单测试程序:
#include <iostream>
#include <boost/thread.hpp>
class Pipeline {
void processStage(int i) {
return;
}
public:
void run() {
boost::thread_group threads;
for (int i=0; i< 8; ++i) {
threads.add_thread(new boost::thread(&Pipeline::processStage, this, i));
}
threads.join_all();
}
};
int main() {
Pipeline pipeline;
int n=2000;
for (int i=0;i<n; ++i) {
pipeline.run();
if (((i+1)*100)/n > (i*100)/n)
std::cout << "\r" << ((i+1)*100)/n << " %";
}
}
据我了解,线程是在 run() 中创建的,并在 run() 结束时终止。所以在主程序中外循环开始时程序的状态应该一直是一样的……
但我观察到处理此循环时速度越来越慢。
我知道在整个程序中保持管道线程处于活动状态会更有效 - 但我需要知道我的管道实现是否存在问题。
谢谢! 康斯坦丁
【问题讨论】:
-
对我来说看起来是正确的,一定是其他一些副作用
-
在我看来,所有这些代码基准测试都是您的操作系统创建和销毁线程的速度。这有什么用?
-
@ildjam:此代码无意使用 - 它是重现所描述效果的最少代码。
-
它是循环执行的次数.. 几乎像 2000 * 8 次
标签: c++ multithreading boost pipeline