- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章?线程的基础知识理解线程是非常关键的,因为每个进程至少需要一个线程。本章将更加详细地介绍线程的知识。尤其是要讲述进程与线程之间存在多大的差别,它们各自具有什么作用。还要介绍系统如何使用线程内核对象来管理线程。与进程内核对象一样,线程内核对象也拥有属性,我们将要观察许多用于查询和修改这些属性的函数。此外还要介绍可以在进程中创建和生成更多的线程时所用的函数。第4章介绍了进程是由两个部分构成的,一个是进程内核对象,另一个是地址空间。同样,线程也是由两个部分组成的:??一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。??另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量(第1?6章将进一步介绍系统如何管理线程堆栈)。第4章中讲过,进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。这意味着线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。因此,如果在单进程环境中,你有两个或多个线程正在运行,那么这两个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。如你所见,进程使用的系统资源比线程多得多,原因是它需要更多的地址空间。为进程创建一个虚拟地址空间需要许多系统资源。系统中要保留大量的记录,这要占用大量的内存。另外,由于.?e?x?e和.?d?l?l文件要加载到一个地址空间,因此也需要文件资源。而线程使用的系统资源要少得多。实际上,线程只有一个内核对象和一个堆栈,保留的记录很少,因此需要很少的内存。由于线程需要的开销比进程少,因此始终都应该设法用增加线程来解决编程问题,而要避免创建新的进程。但是,这个建议并不是一成不变的。许多程序设计用多个进程来实现会更好些。应该懂得权衡利弊,经验会指导??的编程实践。在详细介绍线程之前,首先花一点时间讲一讲如何正确地在应用程序结构中使用线程。6.1?何时创建线程线程用于描述进程中的运行路径。每当进程被初始化时,系统就要创建一个主线程。该线程与C?/?C?+?+运行期库的启动代码一道开始运行,启动代码则调用进入点函数(?m?a?i?n、w?m?a?i?n、Wi?n?M?a?i?n或w?Wi?n?M?a?i?n),并且继续运行直到进入点函数返回并且C?/?C?+?+运行期库的启动代码调用E?x?i?t?P?r?o?c?e?s?s为止。对于许多应用程序来说,这个主线程是应用程序需要的唯一线程。不过,进程能够创建更多的线程来帮助执行它们的操作。每个计算机都拥有一个功能非常强大的资源,即C?P?U。让C?P?U闲置起来是绝对没有道理的(如果忽略节省电能问题的话)。为了使C?P?U处于繁忙状态之中,可以让它执行各种不同的工作。下面是一些例子:??可以打开Microsoft?Windows?2000配备的内容索引服务程序。它能够创建一个低优先级的线程,以便定期打开你的磁盘驱动器上的文件内容并给内容做索引。若要找到一个文件,可以打开Search?Result(搜索结果)窗口(方法是单击S?t?a?r?t按钮,从S?e?a?r?c?h菜单中选定For?Files?Or?Folders),再将你的搜索条件输入Containing?Te?x?t域。这时就可以搜索到索引,相关的文件就会立即显示出来。内容索引服务程序大大改进了性能,因为每次搜索不必打开、扫描和关闭磁盘驱动器上的每个文件。??可以使用Windows?2000配备的磁盘碎片整理软件。通常情况下,这种类型的实用程序拥有许多管理选项,一般用户可能不懂,比如该实用程序应该相隔多长时间运行一次,何时运行。使用低优先级线程,可以在后台运行该实用程序,并且在系统空闲时对驱动器进行碎片整理。??可以很容易地设想将来版本的编译器,每当暂停键入时,它就可以自动编译你的源代码文件。输出窗口可以向你(几乎)实时显示警告和出错信息。当键入变量和函数名时出现错误时,就能立即发现。在某种程度上讲,?Microsoft?Visual?Studio已经实现了这个功能,使用Wo?r?k?s?p?a?c?e的C?l?a?s?s?Vi?e?w窗格,就能够看到这些信息。??电子表格应用程序能够在后台执行各种计算。??字处理程序能够执行重新分页、拼写和语法检查及在后台进行打印。??文件可以在后台拷贝到其他介质中。??We?b浏览器在后台与它们的服务器进行通信。因此,在来自当前We?b站点的结果输入之前,用户可以缩放浏览器的窗口或者转到另一个Web站点。这些例子中,有一个重要
文档评论(0)