Ответ 1
Вы можете сделать что-то вроде этого
for(T& d : data) std::thread(DoTask, d).detach();
Или вы можете использовать что-то более сложное, например, как блоки потоков Intel Thread Building и функцию parallel_for
(не это имя?).
Я выполняю итерацию по вектору структур и обработке каждой структуры по отдельности. Это выглядит примерно так:
for_each(begin(data),end(data),DoTask);
//assume "data" is std::vector<DataT>
//assume DoTask is a function that takes a DataT by reference
Код значительно медленный, потому что DoTask подключается к определенным веб-сайтам и анализирует HTML.
Какой был бы лучший способ ускорить это?
Моя цель состоит в том, чтобы одновременно проанализировать несколько DataT.
Я очень новичок в потоковом режиме, но std:: async и std:: future выглядят многообещающими.
Вы можете сделать что-то вроде этого
for(T& d : data) std::thread(DoTask, d).detach();
Или вы можете использовать что-то более сложное, например, как блоки потоков Intel Thread Building и функцию parallel_for
(не это имя?).
Используете ли вы GCC? В последних версиях есть параллельная версия for_each
(см. здесь о том, как ее использовать).
Вы всегда можете использовать Библиотека параллельных шаблонов (PPL) от Microsoft, если вы нацелились на Windows/VS2010 (или более поздней). Он имеет parallel_for_each
:
parallel_for_each(values.begin(), values.end(), [] (int& value)
{
value *= 2;
});