【问题标题】:Why not use a full list of runnable threads, as opposed to just threads that are runnable but not running?为什么不使用可运行线程的完整列表,而不仅仅是可运行但未运行的线程?
【发布时间】:2011-05-10 23:15:01
【问题描述】:
我正在考虑多处理背后的概念,并试图找出为什么使用包含所有未运行的可运行线程的就绪列表的一些原因,而不是所有可运行线程的列表,数据结构的头部是正在运行的线程?
感谢您的意见。
编辑:让我澄清一下。据我所知,线程包使用就绪列表来标识那些准备好运行的进程,而正在运行的进程则由一个单独的变量来标识。为什么不直接将正在运行的进程包含在就绪列表数据结构中,运行线程在结构的头部,使得线程包全包。多处理会在这个设计方案中引起问题吗?
【问题讨论】:
标签:
multithreading
list
multiprocessing
ready
【解决方案1】:
因为一个线程一次只能在一个处理器(内核)上运行。准备运行的线程列表(实际上是队列)主要由调度程序在寻找应该运行的线程时使用。如果一个线程已经在一个 CPU 上运行,它就不能同时在另一个 CPU 上运行,所以调度器确实不想要查看它(当时 -- 稍后的某个时间它没有运行并且有资格再次运行,它会再次关心它......)