Thread.sleep(0)的作用

操作系统原理:在操作系统中,CPU竞争有很多策略,Unix系统使用的是时间片算法,而Windows则属于抢占式的。

在时间片算法中,所有的进程都拍成一个队列,操作系统按照他们的顺序,给每个进程分配一段时间。如果时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。

所谓抢占式操作系统,就是说如果一个进程得到了CPU时间,则除非它自己放弃使用CPU,否则将完全霸占CPU。因此可以看出,在抢占式操作系统中,操作系统假设所有进程都是“人品很好”的,会主动退出CPU。在抢占式操作系统中,假设有若干进程,操作系统会根据他的优先级、饥饿时间,给他们一个总的优先级。然后操作系统就会把CPU交给总优先级最高的这个进程。当进程执行完毕或自己挂起时,操作系统会在计算一次所有进程的总优先级,然后挑选一个优先级最高的把CPU控制权交给他。

假设现在是2020-11-12 12:00:00.000,如果调用一下 Thread.Sleep(100) ,在 2020-11-12 12:00:01.000 的时候,这个线程会不会被唤醒?并一定会被立刻唤醒,因为我们只是告诉操作系统,在未来100毫秒内不参与CPU竞争,在100毫秒后也许有别的线程在使用CPU,也有可能操作系统在进行CPU权限分配时,当前线程的总优先级并不是最高的那个,CPU还是会被别的线程抢占去。

当代码中使用Thread.Sleep(0)时,Sleep 0毫秒,会使操作系统立刻进行一次CPU竞争,竞争的结果就是也许当前线程仍然获得CPU使用权,也许会换成其他线程获得CPU的使用权。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值