【发布时间】:2021-08-07 22:14:24
【问题描述】:
我正在尝试使用一个简单的求和任务来测试多线程,我想在其中比较单线程与多线程。
单线程:
long long summation(int start, int end)
{
long long total = 0;
for (int i = start; i < end; i++)
{
total += i;
}
return total;
}
和多线程:
long long threadedSummation(int numThreads, int start, int end)
{
long long total = 0;
int summationRange = (start + end) / numThreads; //The range of numbers for every thread to calculate
for (int i = 0; i < numThreads; i++)
{
int start = summationRange * i;
int end = summationRange * i + summationRange;
total += async(launch::async, summation, start, end).get(); //The async function launches
}
return total; //returns value
}
问题在于它没有更好的运行时间。通过测试 start = 0, end = 10000000000 我得到:
单线程:739026695568526336,持续时间:1.21866
多线程:739026695568526336,持续时间:1.28625
所以不是更好,而且我认为代码一定有问题,我将不胜感激。
【问题讨论】:
-
你读过
get做什么 -
您没有并行运行它。在
get中,它正在等待计算完成。 -
这段代码没有正确使用多线程,只是增加了程序的复杂性,使其性能比单线程等效。等待异步操作完成基本上是一个同步操作。
-
我确实阅读了
get所做的事情,但是任何有助于更好地理解我的错误的帮助都会奏效。也许是get正在停止代码? -
我怎样才能让它异步,而不使用 get?
标签: c++ multithreading asynchronous future