C++中的多线程效率

Ste*_*rad 3 c++ multithreading stl

我正在尝试在 C++ 中学习线程,并且只是有一些关于它的问题(更具体地说是<thread>.

假设运行此代码的机器有 4 个内核,我应该将一个操作拆分为 4 个线程吗?如果我要创建 8 个线程而不是 4 个线程,这会在 4 核机器上运行得更慢吗?如果处理器具有超线程,我应该尝试使线程与物理内核或逻辑内核的数量相匹配吗?

我应该不担心机器拥有的核心数量,并尝试创建尽可能多的线程吗?

如果这些问题已经得到解答,我深表歉意;我一直在寻找有关线程 with 的信息<thread>,它是在 c11 中引入的,所以我找不到太多关于它的信息。

有问题的程序将运行许多独立的模拟。

如果有人对<thread>多线程有任何见解或只是一般的多线程,我会很高兴听到它。

Mat*_*son 6

如果您正在执行没有 I/O 的纯计算 - 并且这些计算是独立的,并且不依赖于另一个线程中发生的其他计算的结果,则此类线程的最大数量应该是内核数(如果系统还加载了其他任务)。

如果您正在执行网络 I/O 或类似操作,则当然可以使用更多线程。

如果您正在执行磁盘 I/O,从磁盘读取的单个线程通常是最好的,因为从多个线程读取磁盘会导致在磁盘上移动读/写磁头,这只会使速度变慢。

如果您使用线程来简化代码,那么线程的数量可能取决于您在做什么。

它还取决于每个线程的“独立”程度。如果他们需要以复杂的方式共享数据,共享/等待其他线程/等,可能会使更多线程变慢。

正如其他人所说,尝试使您的框架灵活并测试不同的选项。最好在多台机器上(除非你只有一种机器可以运行你的代码)。