管道实施问题

Con*_*tin 5 c++ multithreading boost pipeline

我创建了一个使用管道模式进行处理的应用程序.但是,我注意到当管道连续多次运行时,它往往变得越来越慢.

在管道阶段没有进行实际处理的情况也是如此 - 所以我很好奇我的管道实现是否有问题.

这是一个简单的测试程序,可以重现效果:

#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 Code Online (Sandbox Code Playgroud)

在我的理解中,线程是在run()中创建的,在run()结束时它们被终止.所以主程序中外循环开始时程序的状态应始终相同...

但我观察到的是处理这个循环时增加的减速.

我知道在整个程序中保持管道线程活跃会更有效 - 但我需要知道我的管道实现是否存在问题.

谢谢!康斯坦丁

小智 0

既然你做了 new boost::thread() 你是否尝试清理它们?如果您在 Windows 上运行,请参阅任务管理器了解进程打开的线程数,并根据需要关闭线程句柄。我怀疑,系统创建的线程数量一直在增加。

  • `boost::thread_group` 析构函数将删除组中的所有 `thread` 对象,因此这不会成为问题。 (2认同)