我有一个问题...我需要构建一个多线程应用程序,我的问题是:如果我有一个 2cpu 处理器,我的 2 个线程是否会自动按处理器分开? 如果我有 4 个线程并且我的电脑有 4 个 cpu,那么每个处理器又是 1 个吗?如果我有 4 个处理器和 2 个 cpu,如何划分??
提前致谢
最佳答案
除非您至少指定操作系统,否则这不是真正可以回答的问题。
C++ 本身对线程一无所知,它们是操作系统为执行环境提供的服务,并依赖于操作系统的实现。
作为一般观察,我非常确定 Linux 独立调度线程,以便多个线程可以分布在不同的 CPU 和/或内核上。我怀疑 Windows 也会这样做。
某些操作系统将允许您指定线程亲和性,即线程(有时是线程组)坚持使用单个 CPU 的能力,但同样,这是一个操作系统问题,而不是 C++ 问题。
对于 Windows(根据您的评论),您可能需要阅读 this introduction . Windows 提供了一个 SetProcessAffinityMask()
函数来控制给定进程中所有线程的亲和性,或 SetThreadAffinityMask()
来独立控制线程。
但是,通常情况下,您会发现最好不要管这些,让操作系统自行解决 - 除非您对不同的行为有特定需求,否则操作系统几乎肯定会做出正确的决定。
关于c++线程划分为微处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4192216/