前言
讨论这个问题前,需要先了解以下知识点!
1、等待/阻塞队列(blocked)中的线程不参与cpu竞争,就绪队列(runable)中的线程才会参与cpu竞争。
2、CPU竞争策略有多种,Unix使用的是时间片算法,Windows属于抢占式。
a)时间片:
所有的进程排成一个队列。操作系统按照他们的顺序,给每个进程分配一段时间,即允许该进程运行的时间。
b)抢占式操作系统
就是说如果一个进程得到了 CPU 时间,除非它自己放弃使用 CPU ,否则将完全霸占 CPU 。因此可以看出,在抢 占式操作系统中,操作系统假设所有的进程都是“人品很好”的,会主动退出 CPU 。
一、sleep(0)发生了什么
它会让操作系统就会重新计算队列中所有线程的优先级,其中本身也参与其中,并且有可能再次获取被CPU运行。
简单是说:它触发操作系统立刻按优先级,重新进行一次CPU竞争。
二、sleep(1)
<它会在极短的1毫秒内进入睡眠(被放入等待队列中,进入等待状态,暂时放弃CPU竞争),1毫秒后立刻又再次参与CPU的竞争。