Linux有:就绪,阻塞,运行,终止。
Windows 有:就绪、延迟就绪、待机、运行、等待、终止、初始化。
为什么 Windows 有这么多状态?这种额外的复杂性有什么好处?
答案1
A跑步线程是当前正在处理器上执行的线程。跑步从列表中选择线程准备好该处理器的线程,这些线程适合交换来执行。支持线程是准备好线程现在被选中交换到跑步该处理器上的下一个状态。但是,如果在进行更改之前有更高优先级的线程准备就绪,则这种情况可能会改变。
延期准备是一个全局状态,指示线程已准备好运行任何处理器。例如,这可以用于一个 CPU 在另一个 CPU 上调度高优先级线程。
不存在的线程准备好运行的状态由它们无法运行的原因决定:
- 线程被放置在已初始化在创建过程中声明。
- 线程可以等待例如,在发生某些事件(如同步或 I/O 完成)时,线程可能会被迫等待,或者在访问已分页到磁盘的内存时,线程可能会被迫等待。一旦事件被发出信号,或者超时已过,线程将有资格再次运行。
- 线程被放置在过渡状态,因为它们的内核堆栈已被调出。这些线程将无法运行,直到它们的内核堆栈再次可用。
- 已退出的线程被放置在已终止状态,直到系统清理完毕。
需要注意的是,线程状态与调度优先级完全分开,调度优先级决定了选择线程运行的顺序。