多线程执行中,调用Thread.Sleep()方法

分情况:

1。

单核的情况下

是把当前正在工作的主线程停止(也就是从把线程变成非工作线程)。

其他需要工作的线程来争夺CPU这个闲下来的核。谁争夺到了谁就开始执行。

直到下一次Sleep的时间到了,又重新来争夺这个CPU的核。但是这里要等到这个核空闲下来才行

(也就是调用ThreadSleep()或工作线程的任务结束。有点类似于异步的概念)

2.

多核的情况下

是把当前正在工作的主线程停止(也就是从把线程变成非工作线程).

如果其他的核的数量足以支撑其他所有线程,那么就不需要来争夺刚刚闲下来的CPU的核。

等到前面Sleep的时间到了就继续执行刚才的任务。

如果核的数量不够让所有线程同时执行。那么就和1一样了。

 

所以有人会在代码里写TheadSleep(0).其实就是强制让CPU空闲下来,所有线程重新参与竞争。这个技巧可以防止有时候线程假死,其他线程有进不来的。

 

相关文章:

  • 2021-12-22
  • 2021-10-11
  • 2022-01-07
  • 2022-12-23
  • 2021-05-12
  • 2021-05-24
  • 2019-11-25
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-21
  • 2022-03-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案