不熟悉线程开发,如果这很明显,请原谅。 我正在使用MS VS 2013,Cx11。问题涉及异步任务以及调用异步(或后来的future.get()实际产生的线程数。如果我有一个自包含的功能:
int PewPewPew(int k)
{
std::this_thread::sleep_for(std::chrono::seconds(1));
return k;
}
这被称为LARGE_MAX次:
vector<future<int>> futures;
int LARGE_MAX = 1000000;
for (int i = 0; i < LARGE_MAX; ++i)
futures.push_back(async(PewPewPew, i));
int total = 0;
for (auto &f : futures)
total += f.get();
cout << "Total: " << total << endl;
是否有某种&#34; smart&#34;线程管理不会产生运行此代码的线程数?我在大多数台式机上假设LARGE_MAX concurent线程效率不高?
谢谢!
更新:我想澄清(来自评论):我知道使用std ::完成上述任务有不同的方法。但据我所知,函数PewPewPew()构成一个任务,因此可以如上所述使用。那么我的问题就是上面的代码会导致“低效的线程”#34;如果LARGE_MAX大于当前系统的最佳线程数。