c# - Thread.Sleep(0) 与 Thread.Sleep(1) 与 Thread.Sleep(2)
问题描述
如果我没记错的话,会将调用线程的时间片放弃给优先级等于或高于Thread.Sleep(0)
调用线程的任何其他线程,同时将其放弃给任何等待线程。Thread.Sleep(any number larger than zero)
现在,在我的脑海中盘旋的是,在 C# 3 或 4 之前,它曾经是Thread.Sleep(0)
只放弃更高优先级的线程、 Thread.Sleep(1)
更高的优先级或相同的优先级以及Thread.Sleep(2)
任何优先级。我对吗?
解决方案
Thread.Sleep(n); // Where n is milliseconds
当 N==0
这告诉系统您要放弃线程的其余时间片并让另一个等待线程(其优先级> = currentThread)运行(这意味着您无法确定何时恢复控制权)。
如果没有其他同等优先级的线程准备好运行,则不会暂停当前线程的执行。
当 N>=1 时(无论是 N=1 还是 N=2)
将阻塞当前线程至少在 n 毫秒内可能发生的时间片(或线程量子)数量,换句话说,它将无条件地将其时间片的剩余部分放弃给任何其他线程。
Windows 线程调度程序确保每个线程(至少具有相同优先级的线程)将获得公平的 CPU 时间来执行。将当前线程阻塞至少指定时间间隔的原因是调度程序在再次到达该线程之前可能需要比指定时间间隔更长的时间。
更新
为了在 C# 3 之前的版本中找到Sleep的工作原理,我遇到了一些有趣的文章(在 2005 年及之前),我认为这些文章值得更新。
简而言之,当 n=1 或 n=2 时,我没有发现线程放弃更高或相同优先级的任何区别。
推荐阅读
- python - 我无法在 python 中导入一些包
- php - 每个类的职责以及它们如何在 UML 中相互交互
- java - 无法处理大数字
- angular - 为什么Material 2 Autocomplete会受到浏览器自动完成的干扰?
- css - `> div` 是否比 CSS 中的其他任何内容都具有更高的重要性?
- forms - React controlled form input not changing despite correct change handling
- mysql - Does MySQL can handle 10 Billions rows of data which has 10-12 columns ?
- reactjs - 如何使用 jest 和酶模拟导入的 React 高阶组件?
- javascript - Angular proxy - Unexpected token in proxy.conf.json
- windows - PDB信息查询不一致(SymEnumSymbols)