Недавно я снова начал работать с C++ и написал простое тестовое приложение, которое находит лучший путь через матрицу целочисленных значений. Чтобы улучшить производительность этого приложения, я реализовал многопоточность, используя C++11 std::thread.
unsigned int threadCount = std::thread::hardware_concurrency();
std::vector<std::thread> threads;
for (unsigned int threadIndex = 0; threadIndex < threadCount; threadIndex++) {
threads.push_back(std::thread(&AltitudeMapPath::bestPath, this, threadCount, threadIndex));
}
for (auto& thread : threads) {
thread.join();
}
На данный момент я просто определяю общее количество доступных потоков и выполняю тест для каждого потока. Это сработало фантастически, но это заставило меня задуматься...
Является ли плохой практикой попытка использовать все доступные потоки для данной системы? Помимо этого простого примера, приложения производственного уровня, которые являются многопоточными, пытаются захватить столько потоков, сколько могут (или насколько позволяет проблема), или мне не следует быть таким жадным?
Спасибо,
number of hardware cores - 1
довольно хорош на практике. Использование всех ядер в большинстве случаев не очень хорошо для пользователя. 16.09.2015number_of_hardware_cores-1
не работает, если hardware_concurrency возвращает 0 или 1. 17.09.2015