Async в C++, два одинаковых потока работают вдвое дольше чем один
Вот минимальный код воспроизводящий проблему:
#include <iostream>
#include <future>
#include <ctime>
using namespace std;
uint test(uint a, uint b)
{
return a * b;
}
uint calculator(uint counter)
{
while(counter>0)
{
test(2, 2);
counter --;
}
return 1;
}
int main()
{
clock_t begin, end;
uint counter = 1000000000;
begin = clock();
auto t1 = async(launch::async, calculator, counter);
auto t2 = async(launch::async, calculator, counter);
uint a = t1.get();
uint b = t2.get();
end = clock();
cout << "time of the iteration is " << (double(end - begin) / CLOCKS_PER_SEC) << endl;
return 0;
}
Если запустить только один из потоков - время выполнения 2,5 секунды. А если запустить оба потока - время выполнения 5 секунд. При этом в диспетчере устройств видно, что с двумя потоками одновременно два ядра процессора загружаются на 100%. Что я делаю не правильно? Вот опции компилятора: g++ -pthread main.cpp -o temp
Ответы (1 шт):
Автор решения: User_0
→ Ссылка
Сейчас увеличил счётчик втрое и измерил время вручную. Оказалось в обоих случаях одинаковое, т.е. async работает нормально.
Просто clock() выдаёт некорректное время, когда используется async.