【问题标题】:Maximum number of threads CPUCPU 最大线程数
【发布时间】:2018-08-18 13:25:02
【问题描述】:

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

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

对于一个程序来说,8 个线程是大线程数还是小线程数?

【问题讨论】:

  • 操作系统的工作是使其看起来像处理器可以执行无限数量的线程。就像它假装您的程序不必与机器上运行的其他程序共享处理器一样。如果您想提高代码效率,那么您可以考虑将创建的线程数限制为内核数,这样操作系统就不必做额外的工作来在它们之间进行上下文切换。

标签: multithreading hardware


【解决方案1】:

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

然而,真正重要的是活动线程的数量。有些程序有数百个线程,但经过组织,在任何给定时刻只有少数线程处于活动状态(即可运行),而其中大多数处于空闲状态(等待 IO,或某些互斥体或条件变量)。

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

英特尔hyper-threading 技术常常令人失望。您可能不希望在具有 4 个内核和 8 个超线程的 Intel 处理器上拥有 8 个活动线程。您需要进行基准测试,但在这种情况下应该会出现一些糟糕的性能(也许拥有 4 或 6 个活动线程会使您的整体性能更好)。

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

【讨论】:

  • 很棒的反应。谢谢!
  • Re,“真正重要的是活动线程的数量......”而不是试图定义“活动”和“非活动”,您可以谈论存在并行使用的线程多个 CPU(又名“工作线程”,又名“计算绑定线程”)与主要用于等待和处理来自不同非同步源的事件的线程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 2016-09-14
  • 2020-11-02
  • 2011-10-05
  • 2023-03-03
相关资源
最近更新 更多