提问者:小点点

使用异步总是使C++代码更快吗


在C++中使用异步函数总是一个好主意吗?

我的意思是,很多时候,我们可能需要做一些简单的事情,比如做一个函数,返回天气,不是素数,等等,那么,这会使C++代码更快还是更慢呢?

//示例代码


#include <iostream>
#include <future>
using namespace std;
bool AsyncTest(int n){
    //do some stuffs    
    return true;
}
int main(int argc, char *argv[])
{
    for(int i=1;i<=10;i++){
        future<bool>ans=async(launch::async,AsyncTest,i);
        cout<<ans.get()<<endl;
    }
}

感谢阅读


共1个答案

匿名用户

这很大程度上取决于你的情况。

我将描述几种情况。

情况一:所有任务处理起来都非常迅速。与创建不同线程所面临的开销相比,所有计算时间的总和是很小的。

->你将获得没有、很少甚至是负的速度提升。

情况二:所有任务都需要很长时间。

->你可能会得到一个速度提升。

情况三:一个任务需要很长时间,其他的任务很快。

->如果并行计算其他任务,您可能不会得到速度提升,因为这并不重要。

情况4:任务需要共享资源(如文件访问)

->您可能不会得到速度提升,因为所有任务都必须等待才能获得对共享资源的独占访问权。

结论:

还有更多的情况可以发生。因此,为了将速度提升归档,您必须

  • 使用真实的测试用例(使用perf或vTune等工具)度量代码中的热点
  • 确定并行化热点的方法。
  • 再次测量

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(异步|c++|代码|更快)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?