原理 | 优势 | 劣势 | 适用场景 | |
Thread.Yeild | 把当前线程放入到就绪队列中 | 比 Thread.Sleep(0) 速度要快,可以让低于当前优先级的线程得以运行。 可以通过返回值判断是否成功调度了其它线程。 | 只能调度同一个处理器的线程,不能调度其它处理器的线程。 当没有其它就绪的线程,会一直占用 CPU 时间片,造成 CPU 100%占用率。 | 如果有核绑定操作,需要慎重 |
Thread.Sleep(0) | 告诉操作系统自己要休息 n 毫秒, 执行后仍在就绪队列 | 相比 Yield,可以调度任何处理器的线程使用时间片 | 只能调度优先级相等或更高的线程,意味着优先级低的线程很难获得时间片,很可能永远都调用不到。 当没有符合条件的线程,会一直占用 CPU 时间片,造成 CPU 100%占用率。 | 如果改线程优先级很高,需要慎重 |
Thread.Sleep(1) | 告诉操作系统自己要休息 n 毫秒, 执行后到阻塞队列 | 可以调度任何处理器的线程使用时间片。 无论有没有符合的线程,都会放弃 CPU 时间,因此 CPU 占用率较低。 | 相比 Thread.Sleep(0),因为至少会休息一定时间,所以速度要更慢 | 对处理延迟敏感,需要慎重 |
Thread.Yeild / Thread.Sleep(0) / Thread.Sleep(1)优缺点对比
最新推荐文章于 2023-07-25 09:55:08 发布