1.windows的可调度线程指的是什么?线程优先级+ 饥饿时间==总和根据这个总和来调度线程。线程总和越大,优先调度。可调度线程指的是:总和最大的那几个线程。 2. Sleep(0) 在核心编程中说会调度》= 调用者线程的优先级。可是msdn却说,server2003后,Windows XP:  A value of zero causes the thread to relinquish the remainder of its time slice to any other thread of equal priority that is ready to run. If there are no other threads of equal priority ready to run, the function returns immediately, and the thread continues execution. This behavior changed starting with Windows Server 2003.顺便说一下,msdn对sleep的解释很含糊,wMilliseconds [in]
The time interval for which execution is to be suspended, in milliseconds.
核心编程解释: 这个时间间隔不是准确的, 线程被挂起的间隔》=wMilliseconds

解决方案 »

  1.   

    1. xp是基于优先级的抢先式多处理器调度系统,所以总是运行优先级最高的线程
    线程的优先级有基本优先级和由于各种可能情况造成的优先级偏移组成,也就是你所说的总和
    2. 如果一线程sleep让出了cpu则说明该线程不是被抢占的,也就不存在更高优先级的线程,如果没有同优先级的则这个函数立即返回继续执行,所以msdn说会调度同优先级的线程是没有错的。
    milliseconds虽然没有说它不是准确时间,但是它肯定是不准确的。这是我的理解,有可能不准确,如有问题请指正。
      

  2.   

    如果一线程sleep让出了cpu则说明该线程不是被抢占的,也就不存在更高优先级的线程,
    我怎么认为sleep的作用是迫使os计算“总和” 后,调度所有非挂起(即等待和运行着,新生的)的线程。这里的挂起不是等待!sleep的作用如果》0,那么会挂起当前线程如果==0, 则:不挂起,该线程和其他线程一块参与 计算总和
      

  3.   

    信MSDN的  但是要针对几个版本看  系统不一样结果也不一样
      

  4.   

    估计核心编程是根据那个泄露的2000源码写的
    XP后的系统和2000内核有所不同了XP后,貌似Sleep(0)和SwitchToThread调度方式一样了
      

  5.   


    哦,是2003后Sleep(0),调度所有可调度线程