发信人: saika() 
整理人: wenbobo(2002-12-06 22:46:29), 站内信件
 | 
 
 
要在NT下编一个程序,
 前后台至少各一个线程,
 后台又可以分为多个线程,
 问到底后台是一个线程还是多个线程的情况下,
 程序分得的处理机的时间片更多呢?
 
 我们有两种看法:
 1.NT是以线程为最小时间片分配单位的,因此分的线程越多分的时间片越多;
 2.假定NT除了一些调度操作其他时间片都分给应用程序,那么线程越多NT用
 来调度所占用的处理机就越多,相对的应用程序分得的就少了.
 不知道那种看法是对的.
 希望有高手不吝赐教.在下感激不尽.
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.97.7.190] 发信人: okay (好好), 信区: C 标  题: Re: 那种看法对? 发信站: 网易虚拟社区 (Sun May 23 16:46:32 1999), 站内信件
     事实上,当一个线程被挂起或进入睡眠态的话,就不会占用cpu时间,也不会 被调度执行,如果没有可执行的现程,系统会调用一个idle线程,以消耗掉cpu时 间。
    如果有多个线程处于运行态,因为调度时间片尺寸是一样的,不管线程数是多 少,在一秒钟内,nt内核都要执行相同次数的线程切换,在理想状态下,系统占 用时间也是相同的。
    实际应用中,一般线程多了会占用更多的内存空间,线程活动造成的内存例外 也会增多,cpu就不得不多花时间处理这些例外,进行内存页面调度。另外,多线 程之间的同步和通讯也会占用一些cpu资源。严格说,太多的线程还会使系统查找 线程调度表时间增长。所以多线程一般会比少线程占用更多的cpu时间。
    拿我们为什么还要用多线程呢?原因很简单,有些程序不用多线程设计会带来 程序结构上的问题,结果是程序执行效率大大降低,得不偿失。另外,程序为人 服务,如果程序整体快了,因为缺乏优先级,人的控制能力和方便性却降低了, 那就失去意义了。
    
 【 在 saika (沙迦) 的大作中提到: 】
 : 要在NT下编一个程序,
 : 前后台至少各一个线程,
 : 后台又可以分为多个线程,
 : 问到底后台是一个线程还是多个线程的情况下,
 :    .......
 
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.237.30] 发信人: magicfat (魔法胖子), 信区: C 标  题: Re: 那种看法对? 发信站: 网易 BBS (Mon May 24 09:19:36 1999), 转信
  【 在 saika (沙迦) 的大作中提到: 】 : 要在NT下编一个程序, : 前后台至少各一个线程, : 后台又可以分为多个线程, : 问到底后台是一个线程还是多个线程的情况下, : 程序分得的处理机的时间片更多呢? :  : 我们有两种看法: : 1.NT是以线程为最小时间片分配单位的,因此分的线程越多分的时间片越多; : 2.假定NT除了一些调度操作其他时间片都分给应用程序,那么线程越多NT用 : 来调度所占用的处理机就越多,相对的应用程序分得的就少了. : 不知道那种看法是对的. : 希望有高手不吝赐教.在下感激不尽.
  对于NT来说,两种说法都是对的。第一种解释中,确实线程越多所占用的 CPU总的计算时间的份额越多(但也有上限,因为应用程序的优先级低于系统 程序);而第二种解释中,线程越多调度消耗越大,因此总的用于实际计算 的时间就减少了,但是具体到某个应用程序,则它占用的时间却可能增加。
  不过很少有程序专门多分线程来多占CPU时间的,因为并占不了多大便宜。
  有些操作系统象Linux和某些版本的UNIX,是先给进程一个总的份额,再 在进程内调度线程,这样线程数和占用CPU多少就关系不大了。
  -- ◆  他号令便号令好了,又何必安静?
  ※ 来源:.网易 BBS bbs.netease.com.[FROM: 24.129.29.151]
  | 
 
 
 |