Большое количество потоков в C ++ и эффективность

В настоящее время я написал программу на C ++, которая иногда использует более 300 потоков. В моей программе есть массив структур, длина которого равна количеству потоков. Предположим, у меня 400 структур и, следовательно, 400 потоков.

В одной итерации цикла for я применяю функцию к каждой из 400 структур, и эта функция выполняется в потоке. Следовательно, у меня одновременно работает 400 потоков. В настоящее время мы написали программу на C ++, которая иногда использует более 300 потоков. В моей программе есть массив структур, длина которого равна количеству потоков. Предположим, что я ...

В настоящее время я написал программу на C ++, которая иногда использует более 300 потоков. В моей программе есть массив структур, длина которого равна количеству потоков. Предположим, у меня 400 структур и, следовательно, 400 потоков.

В одной итерации цикла for я применяю функцию к каждой из 400 структур, и эта функция выполняется в потоке. Следовательно, у меня одновременно работает 400 потоков. В настоящее время мы написали программу на C ++, которая иногда использует более 300 потоков. В моей программе есть массив структур, длина которого равна количеству потоков. Предположим, что я ...

В настоящее время я написал программу на C ++, которая иногда использует более 300 потоков. В моей программе есть массив структур, длина которого равна количеству потоков. Предположим, у меня 400 структур и, следовательно, 400 потоков.

В одной итерации цикла for я применяю функцию к каждой из 400 структур, и эта функция выполняется в потоке. Следовательно, у меня одновременно работает 400 потоков. В настоящее время мы написали программу на C ++, которая иногда использует более 300 потоков. В моей программе есть массив структур, длина которого равна количеству потоков. Предположим, у меня 400 структур и, следовательно, 400 потоков.

В одной итерации цикла for я применяю функцию к каждой из 400 структур, и эта функция выполняется в потоке. Следовательно, у меня одновременно работает 400 потоков. В настоящее время мы написали программу на C ++, которая иногда использует более 300 потоков. В моей программе есть массив структур, длина которого равна количеству потоков. Предположим, у меня 400 структур и, следовательно, 400 потоков.

В одной итерации цикла for я применяю функцию к каждой из 400 структур, и эта функция выполняется в потоке. Следовательно, у меня одновременно работает 400 потоков. (Я использую библиотеку потоков Boost.)

Я попытался дать разбивку того, как выглядит мой код (это не настоящий код):

struct my_struct{
  // Structure's members
};

std::vector<my_struct> my_vec;

void my_fun(my_struct* my_str){
// Operations on my_str
}

int main(){
  std::vector<boost::thread> thr(400);
  for (int k = 0; k < 300; k++){
    for (int i = 0; i < 400; i++){
      thr.at(i) = boost::thread(my_fun, &my_vec.at(i));
      }
    }

    for (int m = 0; m < M; m++){
      thr.at(m).join();
    }
  }
}

Функция, которую я использую, требует больших вычислительных ресурсов и от В приведенном выше коде я использую 400 потоков для вычислений, и это делается 300 раз. Есть ли более эффективный способ выполнить эту задачу? Я не уверен, что одновременное выполнение такого большого количества потоков может повлиять на производительность. Я слышал о библиотеке threadpool, но не уверен, принесет ли она мне пользу. Любая помощь приветствуется.

Большое спасибо.

6
задан Sanjeevakumar Hiremath 13 April 2011 в 07:07
поделиться