C#程序设计 教学课件 作者 刘克成 等 Ch08.pptVIP

C#程序设计 教学课件 作者 刘克成 等 Ch08.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 进程和线程 Microsoft.NET平台支持多任务,使用Microsoft.NET Framework中提供的工具编写多任务应用程序是非常方便的。本章主要介绍进程的模式、操作进程、操作线程、多线程同步技术和线程池的基本知识。 8.1 进程 8.2 线程 8.1 进程 程序是为完成特定任务、用某种语言编写的一组指令的集合,它是一段静态的代码。而进程是程序的一次执行过程,是系统进行调度和资源分配的一个独立单位,它由私有虚拟地址空间、代码、数据和其它操作系统资源(如进程创建的文件、管道、同步对象等)组成。 进程可以简单的分为系统进程(包括一般Windows程序和服务进程)和用户进程。简单的说,凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;而用户进程就是由用户启动的进程。进程和程序所不同的是:程序是静止的,而进程是动态的。 8.1.1 进程模式 1.Windows 32进程模式 在32位的Windows系统平台上,应用程序的宿主是进程,每当把一个Windows 32 EXE程序调入内存时,Windows操作系统都将为EXE程序创建一个单独的内存区域,也就是进程。 2..NET进程模式 基于.NET的应用程序由多个相关的组合(Assembly)组成,应用程序的宿主是应用程序域(Application Domain,简称AppDomain)。在.NET应用程序中,一个进程可以拥有多个应用程序域(AppDomain),应用程序域(AppDomain)各自完全独立。在多个不同的应用程序域(AppDomain)之间是不能共享任何数据的,除非使用.NET Remoting 协议(该协议提供了一种允许对象通过应用程序域与另一对象进行交互的框架)。 8.1.2 操作进程 8.2 线程 8.2.1 操作线程 名字空间System.Threading中的类型提供了多线程程序设计需要实现的功能,包括线程的创建、启动、停止以及多线程同步等。 1.Thread类的介绍 这个类以对象的方式封装了特定应用程序域(AppDomain)中给定的程序执行路径,该类中提供的方法可以用来从当前的线程中创建新线程、挂起线程、停止和销毁线程等。 2.线程的控制 3.线程的优先级别 【例8.3】创建线程 8.2.2 多线程同步 多线程是指进程中同时存在几个执行体,按几条不同的执行线索共同工作的情况,也就是在一个进程中可以同时运行多个不同的线程来执行不同的任务。 多线程的好处在于可以提高CPU的利用率,在多线程程序中,一个线程当处于必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了CPU的使用效率。 8.2.2 多线程同步 然而使用多线程也有不利的方面:线程也是程序,需要占用内存,线程越多占用内存也越多,同时,多线程需要协调和管理,线程太多会导致控制太复杂,必须解决当多个线程同时运行相同的代码或者多个线程同时使用某个共享资源(例如:硬件或内存数据)时,线程不同步的问题,例如,有一个主线程启动了两个打印线程,则这两个线程就不能不分先后地随机打印,而必须等待一个线程结束之后,另外一个线程才开始打印,否则打印页就会互相交错。 1.加锁(Lock) 2.监视器(Monitor) 3.互斥体(Mutex) 4.定时器(Timer) 8.2.3 线程池 许多应用程序使用多个线程,但这些线程经常在休眠状态中耗费大量的时间来等待某个事件发生才开始运行,而有的线程会周期性地执行某个操作或更新状态信息。使用线程池(Thread Pool)可以为应用程序提供一个由系统管理的工作线程的集中单元,使得可以集中精力于应用程序任务而不是线程管理。 1.ThreadPool类 2.线程池举例 1.ThreadPool类 由于一个进程中只会拥有一个线程池,因此ThreadPool不需要应用程序自身构造,当第一次调用ThreadPool类中的静态方法QueueUserWorkItem时创建线程池。 QueueUserWorkItem方法: 这个方法的功能是把一个工作项目(Work Item)放入线程池的工作线程队列中 注意:ThreadPool.SetMaxThreads方法,设置可以同时处于活动状态的线程池的请求数目。所有大于此数目的请求将保持排队状态,直到线程池线程变为可用。ThreadPool.SetMinThreads方法,设置线程池在新请求预测中维护的空闲线程数。

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档