Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 管道实现的问题_C++_Multithreading_Boost_Pipeline - Fatal编程技术网

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
对象,因此这不会是问题所在。