C++ 管道实现的问题
我创建了一个应用程序,它使用管道模式进行一些处理。 但是,我注意到,当管道连续运行多次时,它会变得越来越慢 在管道阶段没有进行实际处理时也是如此——因此我很好奇我的管道实现是否有问题 这是一个简单的测试程序,可重新产生效果:C++ 管道实现的问题,c++,multithreading,boost,pipeline,C++,Multithreading,Boost,Pipeline,我创建了一个应用程序,它使用管道模式进行一些处理。 但是,我注意到,当管道连续运行多次时,它会变得越来越慢 在管道阶段没有进行实际处理时也是如此——因此我很好奇我的管道实现是否有问题 这是一个简单的测试程序,可重新产生效果: #include <iostream> #include <boost/thread.hpp> class Pipeline { void processStage(int i) { return; } pu
#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 << " %";
}
}
#包括
#包括
类管道{
无效处理阶段(int i){
返回;
}
公众:
无效运行(){
boost::线程组线程;
对于(int i=0;i<8;++i){
添加_线程(新的boost::thread(&Pipeline::processStage,this,i));
}
线程。连接所有线程();
}
};
int main(){
管道;
int n=2000;
对于(int i=0;i(i*100)/n)
std::cout自从您创建新的boost::thread()以来,您是否尝试清理它们?如果您在windows上运行,请参阅任务管理器,了解进程打开的线程数,如果需要,请关闭线程句柄。我怀疑,系统创建的线程数正在不断增加。我不知道运行速度减慢的确切原因(),但当我使用代码obove并在main()中的循环结束处插入一点睡眠(500毫秒)时,run()的减速就消失了。因此系统似乎需要一些“恢复时间”直到它能够创建新线程。在我看来是正确的,一定是其他的副作用。在我看来,所有这些代码的基准是你的操作系统创建和销毁线程的速度。这有什么用?@ildjam:这段代码无意中是有用的-它是复制所描述效果的最小代码。这是你的循环执行的时间执行..大约2000*8次boost::thread_组
析构函数将删除组中的所有thread
对象,因此这不会是问题所在。