请问1  如果使用waitforxxxx 这类的函数让线程阻塞,那么线程是否还会消耗CPU时间?2  为什么一个空循环能让CPU使用率暴增,而里面加上些IO操作及waitforxxx函数 代码,就几乎不占什么时间了呢?按理说 那些代码操作都是在消耗CPU时间啊
一直没搞清楚,线程在 sleep,挂起,阻塞 三种状态下的 开销情况。

解决方案 »

  1.   

    1. 不会, 系统会去调度别的线程. 只有wait的事件到达后才会调度这个线程, 所以这个线程不耗CPU
    2. 空循环没有让出CPU, 一直占用CPU。 加上IO后,IO一般处于等待状态,系统也会调度别的线程。所以这个线程也不耗CPU时间关键是你的线程在wait的时候,你看着时间长,但你的线程没有被执行,所以是别的线程在用CPU
      

  2.   

    1. 不占2. 空循环? 空循环也有条件判断sleep是暂时释放cpu,交由系统进行线程调度,平衡一下系统时间挂起,是让线程不参与系统线程调度,没有开销阻塞,如果是Wait之类,和挂起效果一样,但如果调用了一个同步函数,基本上会导致线程占用大量的时间片
      

  3.   

    楼上说的 同步函数是指啥? WaitForXXXX不是同步函数??
      

  4.   

    线程处于休眠和等待状态时不占用CPU时间,执行I/O操作几乎都需要等待,所以CPU占用率较低。