Я создал приложение, которое использует шаблон конвейера для некоторой обработки.
Однако я заметил, что когда конвейер запускается несколько раз подряд, он становится все медленнее и медленнее.
Это также тот случай, когда фактическая обработка не выполняется на этапах конвейера - поэтому мне любопытно, может быть, у моей реализации конвейера есть проблема.
Это простая тестовая программа, которая воспроизводит эффект:
#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 () они завершаются. Таким образом, состояние программы в начале внешнего цикла в основной программе всегда должно быть одинаковым ...
Но я наблюдаю возрастающее замедление при обработке этого цикла.
Я знаю, что было бы более эффективно поддерживать потоки конвейера во всей программе, но мне нужно знать, есть ли проблема с моей реализацией конвейера.
Спасибо!
Constantin