我有一些关于多线程编程和多核使用的问题。
特别是我想知道操作系统和/或框架(这是.NET)如何处理大量使用的核心。
这是我关于线程的问题:
- 当产生一个新线程时,将线程分配给特定核心的算法是什么?
- 循环算法类型
- 随机的
- 目前使用最少的核心
- 如果不是当前使用最少的核心,那么确定这种类型的代码是否会使线程的典型使用相形见绌,从而使事情变得更糟?
- 线程在其生命周期内是否从一个核心移动到另一个核心?如果是这样,这是为了处理由于某种原因被“过度使用”的内核,因此操作系统会尝试将线程转移到使用较少的内核以帮助系统?如果不是,再次,为什么不呢?
我的最后一个问题,基本上是对上述内容的重用,是关于 .NET ThreadPool 类的,它处理诸如 .BeginInvoke 之类的事情。这门课做这些事情吗?如果不是,为什么不,或者应该这样做?
有什么办法可以调整这种处理方式,在操作系统中暗示这个特定线程,当你给它分配一个内核时请多加注意,因为我知道它会使用很多 cpu。这有意义吗?或者“很多cpu”只是相对的,因此还不够好?