【发布时间】:2022-01-10 12:56:41
【问题描述】:
我正在使用 C++11 开发一个项目。
在某些功能中,我得到了一些并行任务如下:
void func() {
auto res1 = task1();
auto res2 = task2();
auto res3 = task3();
...
std::cout << res1 + res2 + res3 + ...;
}
嗯,每个任务都有点繁重,假设每个任务会花费 300 毫秒。
现在我认为将每个任务设为std::thread 应该会提高性能。
但据我了解,调度线程的是操作系统。 我不确定操作系统是否确保它会立即执行这些线程或者它可能需要等待一些其他的东西?
所以我的问题是,如果让任务多线程确实可以提高性能,或者在某些情况下,这种方法会得到更差的性能?
顺便说一句,我知道线程过多会因为上下文切换而导致性能非常差,在我的实际情况下,任务的数量少于 10 个并且它们不共享任何数据。
【问题讨论】:
-
没有通用的答案,结果取决于太多的因素(例如线程创建的延迟、CPU 内核的数量等)。你为什么不简单地衡量两个选项?顺便说一句,
std::async似乎比std::thread更适合您的情况。 -
你试过了吗?您是否查看过任何文档(想到 cppreference.com)?此外,当某些部分是实现定义的时,答案可能是“取决于”。请放心,任何普通操作系统都可以在不同的 CPU 上运行线程,即完全并行。
标签: c++ multithreading performance c++11