一般来说,一个std::thread t (some function )
和t.join ()
的CPU成本是多少?它甚至会影响 CPU 打开和关闭线程吗?
当然,线程创建和销毁确实需要付出一些代价。不如进程创建/销毁那么多,因为线程在它们之间共享大部分资源(地址空间是最重要的),但它仍然需要成本。
这就是为什么如果你有 M 个任务和 N 个内核,其中 M>> N(明显更大),而不是为每个任务创建一个线程,如果你创建一个包含 ~N 个线程(称为 worker)的池,有时会更快。您有额外的同步成本,但通过不创建/销毁这么多线程,您可以获得收益。
加入是另一个讨论,因为加入与关闭线程不同。联接正在等待线程完成。