CPU最大线程数

时间:2018-08-18 13:25:03

标签: multithreading hardware

这与处理器的线程有什么关系?例如,英特尔i5具有四个内核和四个线程。

我们的程序中可以使用多少个线程?例如在C ++中使用std :: thread(STL)?

一个程序的8个线程是大还是小线程?

1 个答案:

答案 0 :(得分:2)

这真的取决于。根据经验,将线程数限制为接近内核数(否则,context switchs可能太多)。您可以使用std::thread::hardware_concurrency()作为提示。通常,您使用thread pool来组织程序。

但是,真正重要的是 active 线程的数量。有些程序具有数百个线程,但是它们的组织方式使得在给定的瞬间它们只有少数处于活动状态(即可运行),而大多数程序处于空闲状态(等待IO,某些互斥量或条件变量)。

请注意,线程是非常重的资源(特别是因为它具有自己的调用堆栈,通常至少为一个兆字节)。因此,不要太多(因此,除非拥有一台非常强大且扩展的计算机,否则拥有数千个线程通常是不合理的。)

英特尔hyper-threading技术通常令人失望。您可能不想在具有4个核心和8个超线程的Intel处理器上拥有8个活动线程。您需要进行基准测试,但是在这种情况下,您可能会预期性能会有所下降(也许拥有4个或6个活动线程会提高整体性能)。

Threadsabstraction提供和管理的operating system。因此,请阅读Operating Systems: Three Easy Pieces以了解有关操作系统的更多信息。