我对多线程编程和多核使用有一些疑问。
特别是我想知道操作系统和/或框架(这是.NET)如何处理被大量使用的核心。
以下是关于线程的问题:
- 当新线程生成时,将该线程分配到特定核心的算法是什么?
- 轮换算法
- 随机算法
- 目前最少使用的核心
- 如果不是目前最少使用的核心,那么决定这个核心的代码是否会使线程的典型使用变得更糟,从而使情况变得更糟?
- 线程在其生命周期内是否移动到另一个核心?如果是,这是为了处理某些原因超负荷使用的核心,因此操作系统尝试将线程转移到使用较少的核心以帮助系统吗?如果没有,为什么?
我的最后一个问题,基本上是上面的重复利用,是关于.NET ThreadPool类的,它处理像.BeginInvoke之类的东西。这个类做这些事情吗?如果不是,为什么不应该这样做,或者应该吗?
有没有办法调整这种处理方式,就像提示操作系统,这个特定的线程,请在分配核心时多加注意,因为我知道它将使用大量CPU。这是有意义的吗?或者“很多的CPU”只是相对的,因此不太好?