我正在考虑多处理背后的概念,并且我试图想出一个原因,为什么使用包含所有未运行的可运行线程的就绪列表,而不是所有可运行线程的列表,其中数据结构的头部是正在运行的线程?
感谢您的意见。
编辑:让我澄清一下。据我所知,线程包使用就绪列表来标识准备运行的进程,而运行进程由单独的变量标识。为什么它们只是将正在运行的线程放在结构头部的就绪列表数据结构中包含正在运行的进程,从而使线程包全部包含在内。多处理是否会导致此设计方案出现问题?答案 0 :(得分:2)
因为一个线程一次只能在一个处理器(核心)上运行。准备运行的线程列表(实际上是队列)主要由调度程序在查找它应该运行的线程时使用;如果一个线程已经在一个CPU上运行,它不能同时在另一个CPU上运行,所以调度程序不想要查看它(当时 - 稍后某个时候它没有运行并且有资格再次运行,它会再次关心它......)