1.线程是CPU调度的最小单位,是不是指时间片是按线程分的?
2.如果1的答案为是,那么某个进程有超多的线程,那么这个进程将占据绝大多数CPU时间?
3.如果1的答案为否,那么时间片按进程分,单核多线程速度会比单线程慢呗,因为要线程切换?

解决方案 »

  1.   

    windows 是以线程来分配时间片的。线程,活动时有两个状态,一个是对 cpu 有要求比如SuperPI 的计算过程;一个是在等待消息状态的无要求,其实绝大部分的线程都是这样的状态;所以,一个进程尽管有众多的线程,它所获得的时间片不一定就有多少,这个可在“任务管理器”里看各个进程的状态信息的,同时将进程的线程数和CPU时间打开。
      

  2.   

    1,进程是资源分配单位,线程是CPU调度单位,对大多数操作系统来说,时间片是线程而非进程相关的;
    2,不一定,线程的调度执行是有优先级的,优先级高的得到更多时间片,Linux系统中优先级高的线程时间片大于优先级低的时间片,所以进程有多个线程并不一定这个进程会占用更多CPU时间;
    3,这个还是跟优先级有关,如果优先级低,线程再多也不能加快执行速度,即使进程是单线程也是通过操作系统来调度的,也会分配时间片,因为后台还有许多线程在调度执行;但有一点是明确的,线程是对CPU的虚拟,进程有多个线程相当于给该进程分配了多个CPU来执行,效率肯定要高于只分配一个CPU来执行。
      

  3.   

    第一个问题: 必须是第二个问题:如果这个进程里的所有线程都是活动的话,那么是的;一般程序里如果经常会用Sleep或者SuspendThread来让一个线程不活动,这样就不会占用CPU时间片楼主想要了解更详细的原理,可以看《windows核心编程》
      

  4.   

    1.是
    2.是不是占据绝大多CPU时间,还看操作系统调度策略:批处理,那可能是;分时操作,那可能不是,这也还得看其他进程线程比例。还看线程作业情况,比如,该进程(有很多线程)主要进行IO操作,线程一进CPU运行,不久就被挂起,转而去执行其他线程进程,那还是别的进程占据的时间多。
    3.假如时间片是按进程来分的,那单核多线程速度会比单线程快!因为线程切换要比进程切换速度要快很多,这正式线程几大优点之一!多回看几遍书,啊哈哈哈哈。