解决方案 »

  1.   

    本质区别就是,一个是CPU将线程挂起,等它可以执行了再执行它
    另一个是CPU不断的执行,然后线程自己去判断该干什么
    很明显的前一个效率比较高好比你煮饭,是设定个闹钟,然后就去睡觉,还是每隔一分钟就去看看熟了没有?
      

  2.   


    恩,这个其实我也能够想象,但是问题是当前线程被Suspend之后一定是另外一个线程再Resume吧?如果这个没问题的话我是否可以想象有一个内核对象在一直做这件事情,发现一个线程需要被唤醒之后再去唤醒这个线程?如果这个也没问题的话是否还是有一个线程比如说这个内核对象在做轮询对所有的状态做一个检查?不知道我的猜测是否合乎逻辑,或者说查查什么样的书籍会有答案?不吝赐教,谢谢。
      

  3.   

    你所谓的内核,就是CPU的内核啊
    线程也不过是一段代码,得放到CPU里才能真正执行
    CPU虽然是多核的,但是也不会每个线程都对应一个内核,是分时处理的
    CPU会不断切换线程来执行,让每个线程都能得到执行,而不是有的一下就执行完了,另一个还在傻等
    如果你用了while(true),那么到时间它就会被执行,结果执行的时候没干什么有用的事情,纯粹是在浪费CPU资源
    而你用了waitone,那么该到它执行的时候,cpu发现它正在被挂起,不应该执行它,就会先执行别的线程,这样效率才高
      

  4.   

    此外,在while(true)里加上sleep,能够更好的利用CPU资源,CPU发现线程正在休眠,休眠时间还没到,就不会先唤醒它
    当然这样做有可能睡过头了,已经可以执行了,但是多睡了一会,导致效率下降