| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 910 人关注过本帖
标题:线程的概念
只看楼主 加入收藏
Initial
Rank: 1
等 级:新手上路
帖 子:26
专家分:7
注 册:2009-8-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
线程的概念
哪位大侠解释下线程的概念,不要扯远
清楚了追加分
搜索更多相关主题的帖子: 线程 概念 
2009-08-02 12:07
NTYLWJ
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:191
专家分:698
注 册:2008-12-2
收藏
得分:20 
第13章    线  


凡用兵之法,驰车千驷,革车千乘,带甲十万,千里馈粮,则内外之费,宾客之用,胶漆之材,车甲之奉,日费千金,然后十万之师举矣。这是《孙子兵法》“第二篇•作战篇”中的一句话,每当提起进程或线程的概念都使我想起战法和谋略。进程之于操作系统来说乃将,线程之于操作系统来说乃兵,正所谓将兵之道,国之大事,死生之地,不可不察也。


操作系统管理和控制着计算机系统中的硬件和软件资源、组织计算机工作流程以及用户交互,它就好比电脑王国中的国王。在电脑这个世界里,随着电子工业和软件产业日新月异的发展,操作系统由无兵无将蛮荒的DOS时代走到了今天这个良田千顷拥兵数万的崭新阶段。回想当年DOS操作系统,如果你启动一个搜索任务或者其他任何事情,你都必须停止工作,出去喝杯茶或者就地睡一觉,然后才能继续工作。我们称这种操作系统为单任务的,谈不上什么单进程,更不用说多进程多任务。而今天Windows的抢先式多任务把我们带到了几乎艺术的境界。如今在这个多任务多进程,具有高度安防的操作系统中,你甚至会惊讶地发现你可以一边刻录磁盘,一边听歌,甚至一边在网络游戏中PK……如果你不是很了解操作系统,那么相信你一定等不急了,下面我们就揭开当今操作系统的神秘面纱。


13.1  进程与线程的概念


我们首先来介绍进程,进程是什么呢?直观的讲,进程就是正在执行的程序,一个进程通常就是一个正在执行的应用程序。从Windows角度讲,进程是含有内存和资源并安置线程的地方。进程中的资源可以包括文件句柄、线程、用户资源(对话框或字符串)、GDI资源(设备环境DC和画笔等)等。进程往往与一个任务挂钩,就像上面我们提到的“将”,操作系统负责分配资源让进程率领众线程完成某种任务。也是因此,Windows提供一个叫做“任务管理器”的工具可以让我们查看和管理进程,如下图13.1所示:

  
图13.1  任务管理器  


我们不妨简单介绍几个当前运行进程的含义。比如上面的avgas.exe是我本机杀毒软件卡巴斯基的进程;notepad.exe是我当前打开的记事本程序的进程;alg.exe是一个系统进程,用于进行网络共享相关的网关服务。这些启动的进程跟本机环境有关,当我们启动一个应用程序(或说一个任务)时通常也就启动了一个进程。从上图可以看出每一个进程占有一定的内存空间和CPU,当然进程还会有其他系统资源,内存和CPU只是操作系统便于我们了解进程的运行情况向我们公布的进程的重要信息。


所以准确的讲,进程就是一个可执行的程序一次运行的过程,它是系统进行资源分配和调度的一个独立单位。明白进程是系统进行资源分配和调度的单位非常重要,内存和CPU都是系统资源,当一个程序被调入内存开始执行时就变成了进程,此时操作系统便为其分配了这些相关的资源并且负责进行调度。进程是将,这个将直接对操作系统这个国王负责,国王可以分配给他一定的土地和俸禄(对应系统资源)并指派他去完成特定的任务。一个国家日理万机的大将可以有很多,这也就是操作系统多进程的概念,操作系统这个国王负责调兵遣将。


按照定义,线程是操作系统分配处理器(CPU)时间的基本单元,是系统中最小的执行单元。如前所述,进程如将,线程如兵,操作系统创建并控制进程,进程包含和控制线程。我们知道国王和将帅自己并不去攻城掠地,他们只是坐阵指挥。那么实际上真正进行攻城掠地的是兵(线程)。兵也有自己的资源(系统会为线程初始化一个线程内核对象,还有一块1M左右的内存堆栈)。作为将要善于谋略,善于部署,善于将兵,拥兵十万不如精甲十千。作为兵要众志成城、竭尽全力去完成自己的任务。所以线程不可滥用,进程应当精简(一个进程只需做一个任务就够了)。


多进程决定了操作系统的多任务。但是我们知道我们往往只有一个CPU,一个CPU在同一时间只能做一件事情,多任务又是怎么实现的呢?我们知道要真正完成某个任务的是线程,对于进程来讲至少会带有一个默认的线程,我们称之为主线程。我们先假设进程都带有一个线程。线程要执行就需要CPU,我们知道现今CPU因为执行速度非常快,它没有必要单独为一个线程服务,因此它将自己一秒的时间进行切片,每片有1毫秒左右(这个微软没有具体说明,是由操作系统内部参数来控制这个时间值,具体来说跟CPU速度有关,速度越快时间片切的越小),然后它就以时间片为单位向外提供服务。比如在一秒钟内A线程占有10个时间片,B线程占有30个时间片……每一秒都这样分配了以后,操作系统负责CPU的切换,于是一秒钟过后所有线程都执行了,整体看上去好像所有的进程是在同时运行,这就是操作系统多任务的实现方式,是通过不断切换线程执行实现的。


下面是一个CPU利用图(图13.2),操作系统负责进行线程之间的切换:

  
图13.2  线程原理图  


从上图首先可以看出,对于单个线程来讲抢占的CPU时间越多它完成的事情就越多,也可以说是执行就越快。要让某个线程抢占CPU的能力增加,你可以提高该线程的优先级,通常来说优先级越高的线程抢占CUP能力越强,当然,大部分情况下不需要这么做。因为线程是抢占CPU的主力军,所以我们可以用增加线程数目的方式提高进程的执行速度。从一般意义上讲,进程在完成任务时用的线程越多任务就完成的越快,正所谓三军之众,可使必受敌而无败。我们从CPU时间片的角度举一个通俗的例子,假如给你一星期时间,你将它切片,每天为一片。假如你有三个女朋友,你和这三个女友的感情进展就可以看作是三条线程,那么如果她们其中一个获得4个时间片去发展感情,另外两个都是1个时间片,如此常此以往,很显然与拥有四个时间片的女友感情进展最快。
收到的鲜花
  • Initial2009-08-02 21:09 送鲜花  3朵   附言:谢谢诶~~ 能提供下 你用的电子书吗?
2009-08-02 14:34
Initial
Rank: 1
等 级:新手上路
帖 子:26
专家分:7
注 册:2009-8-1
收藏
得分:0 
很好很好,看的意犹未尽啊~~  不过似乎应该还有下文吧
顺便问下,能提供此电子书吗?
2009-08-02 21:08
甄vs爱
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-8-1
收藏
得分:0 
是有一点明白了

亖稾
2009-08-03 15:08
苍舞
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-7-27
收藏
得分:0 
受教
2009-08-03 21:35
快速回复:线程的概念
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016431 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved