multithreading - CPU最大线程数

标签 multithreading hardware

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

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

对于一个程序来说,8 个线程是多线程还是少线程?

最佳答案

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

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

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

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

Threadsabstractionoperating system 提供和管理.所以读Operating Systems: Three Easy Pieces了解有关操作系统的更多信息。

关于multithreading - CPU最大线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51909125/

相关文章:

c# - 取消异步 Web 服务调用

java - 确定企业 Web 应用程序的服务器硬件要求

hardware - 如何从 C 代码生成 hexfile 以测试 32 位 RISC-V 硬件设计?

python - 如何使 Ruby 或 Python 网站使用多核?

multithreading - 为什么这个 Haskell 程序在写入文件时会挂起?

c# - 如何查看 Parallel.ForEach 循环中引发的线程数?

c++ - Libev C++ 无法停止多线程应用程序中的动态循环

windows - 我可以在 Windows 机器中使用的最大 RAM 量是多少?

architecture - 为什么位数总是(?)2的幂?

c - 有没有什么设计工具可以让我获得C代码中不同函数的确切指令数