精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>技术精解:内存、进程、线程等>>NT中线程时间片分配的问题

主题:NT中线程时间片分配的问题
发信人: 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]

[关闭][返回]