最大线程数 CPU
Maximum number of threads CPU
这与处理器的线程有什么关系?例如,Intel i5 有四个内核和四个线程。
我们的程序可以使用多少个线程?例如在 C++ 中使用 std::thread (STL)?
对于一个程序来说,8 个线程是多线程还是少线程?
这真的取决于。根据经验,将线程数限制为接近内核数(否则你可能有太多 context switchs). You might use std::thread::hardware_concurrency()
as a hint. Often, you organize your program with a thread pool.
然而,真正重要的是 active 线程的数量。有些程序有数百个线程,但经过组织,在任何给定时刻只有少数线程处于活动状态(即可运行),而大多数线程处于空闲状态(等待 IO,或某些互斥锁或条件变量)。
请注意,线程是一种非常繁重的资源(特别是因为它有自己的调用堆栈,通常至少有 1 兆字节)。所以不要有太多线程(因此,拥有数千个线程通常是不合理的,除非你有一台非常强大和扩展的计算机)。
英特尔 hyper-threading 技术常常令人失望。您可能不希望在具有 4 个内核和 8 个超线程的 Intel 处理器上有 8 个活动线程。您需要进行基准测试,但在这种情况下您应该预料到一些糟糕的性能(也许有 4 或 6 个活动线程会使您的整体性能更好)。
Threads are an abstraction provided and managed by the operating system. So read Operating Systems: Three Easy Pieces 了解更多关于操作系统的信息。
这与处理器的线程有什么关系?例如,Intel i5 有四个内核和四个线程。
我们的程序可以使用多少个线程?例如在 C++ 中使用 std::thread (STL)?
对于一个程序来说,8 个线程是多线程还是少线程?
这真的取决于。根据经验,将线程数限制为接近内核数(否则你可能有太多 context switchs). You might use std::thread::hardware_concurrency()
as a hint. Often, you organize your program with a thread pool.
然而,真正重要的是 active 线程的数量。有些程序有数百个线程,但经过组织,在任何给定时刻只有少数线程处于活动状态(即可运行),而大多数线程处于空闲状态(等待 IO,或某些互斥锁或条件变量)。
请注意,线程是一种非常繁重的资源(特别是因为它有自己的调用堆栈,通常至少有 1 兆字节)。所以不要有太多线程(因此,拥有数千个线程通常是不合理的,除非你有一台非常强大和扩展的计算机)。
英特尔 hyper-threading 技术常常令人失望。您可能不希望在具有 4 个内核和 8 个超线程的 Intel 处理器上有 8 个活动线程。您需要进行基准测试,但在这种情况下您应该预料到一些糟糕的性能(也许有 4 或 6 个活动线程会使您的整体性能更好)。
Threads are an abstraction provided and managed by the operating system. So read Operating Systems: Three Easy Pieces 了解更多关于操作系统的信息。