第14章 线程和异步编程
本章概述:
本章我们将要学习Microsoft? .NET Framework为多线程应用程序和异步编程所提供的支持。公共语言运行库将许多对线程的支持都抽象为类,这些类大大简化了大部分的线程任务。如果要在多线程环境中运行代码,即使不显式地创建自己的线程,也需要理解该代码是如何处理多线程的。在本章节中,我们将会大面积的介绍这方面的知识点。在.NET Framework中,异步编程是远程处理、网络、 HTTP、 TCP、文件I/O、Microsoft ASP.NET和消息队列(也称为MSMQ)所支持的一个特性。这也是我们可以通过本章节了解到的。
教学目标:
1. 掌握创建和管理线程的方法,并能创建线程的安全代码,同时还能掌握使用线程
池创建线程的方法。
2. 掌握创建和使用计时器的方法。 3. 掌握使用委托进行异步调用的方法。
教学重点:
1. 在.NET中使用线程这是非常重要的,尤其是在进行多线程编程的时候能使用线程
是非常重要的。
2. 线程的安全非常重要,这将会影响到程序代码的安全性,掌握这一点非常重要。 3. .NET Framework对异步编程的支持是现在比较常用的技术。掌握此技术对于增加
学生职业竞争力非常重要。
教学难点:
1. 多线程,超线程之类的词汇我们可能经常听到,但基于线程的开发对于大家还是
非常陌生的。需要花时间进行讲解。
2. 异步编程的技术也是一个非常难理解的技术点。但非常重要,需要和学生耐心讲
解。
教学资源:
14.1线程介绍 课本 知识点 14.2在.NET中使用线程 14.3线程安全 《基于VB.NET的.NET Framework程序设计》教学指导手册—详细教案
14.4线程的特殊主题 14.5.NET中的异步编程 实验:使用多线程应用程序 练习1:创建线程安全的方法 实验 练习2:周期性地写入日志文件 练习3:为用户提供状态 练习4:进行异步方法调用 习题1,2,3,4,8对应知识点在.NET中使用线程(14.2) 习题 习题5,6,7,9对应知识点.NET中的异步编程(14.5) 习题10对应知识点线程安全(14.3) 幻灯片 教师光盘 实验文件 习题解答 教师光盘:\\Powerpnt\\2415B_14.ppt 教师光盘:\\Labfiles\\ALLFILES.EXE默认解压目录下C:\\Program Files\\Msdntrain\\2415 教师光盘:\\Tprep\\answer.doc 先修知识
在正式开始学习本章内容以前,学生须具备下列知识基础。 先修知识 了解开发计算机应用程序的基本知识。 了解VB.NET的基本语法。 推荐补充 《程序设计导论》 《VB.NET程序设计语言》 建议学时数
3课时课堂教学+1课时实验教学
2
第14章 线程和异步编程
教学过程 14.1线程介绍
教学提示 : 本节主要达到目的。
? 了解什么是线程及使用线程进行开发的优缺点。(略讲)
? 了解.NET对线程从哪几方面进行支持及.NET的线程体系结构。(略讲) 教学内容 讲授: 在本章节学习之前,我们必须了解什么是线程? 教学方法 阅书:14.1.1 幻灯:第3-4页 提示 线程是指程序的一个指令执行序列,WIN32 平台支持多线程程序,允许程序中存在多个 线程。 在单 CPU 系统中,系统把 CPU 的时间片按照调度算法分配给各个线程,因此各线程实际上是分时执行的,在多 CPU 的 Windows NT 系统中, 同一个程序的不同线程可以被分配到不同的 CPU 上去执行。由于一个程序的各线程是在相同的地址空间运行的,因此涉及到了如何共享内存, 如何通信等问题,这样便需要处理各线程之间的同步问题,这是多线程编程中的一个难点。这我们在后面的课程里会和大家介绍。 讲解课本14.1.1 多线程使多个活动看起来似乎是在一个应用程序中同时发生。这就好比我们经常玩的游戏。画面,声音,还有我们做的操作或者指令都是同时进行的。这其实就是一个多线程优点的体现。还可以使用线程来区分不同优先级的任务是另外一个优点。这很简单了。就是可以让不同的操作按照不同的先后顺序执行。同时,多线程使得处理器在等待事件完成的同时还能够处理其他的任务。 讲解课本:14.1.1 同样,有优点就有缺点。线程可能会降低应
3
《基于VB.NET的.NET Framework程序设计》教学指导手册—详细教案
用程序的性能。用多线程控制代码执行是非常复杂的,并可能产生许多错误。 讲解课本:14.1.1 讲授: 为了支持多线程编程,.NET Framework 提供了自己的命名空间来创建和管理线程,我们要知道System.Threading,System.Threading.Thread。我们看一下书上怎么写的: 讲解课本:14.1.2 .NET Framework中的标准异步设计模式为管理异步操作提供了高效的模型,并且提供了一致的编程模型。.NET Framework通过使用IAsyncResult接口和委托类(这些类使程序员不用实现某些线程处理的细节)来支持异步编程。在本章的后续章节将更详细地介绍异步设计模式。 阅书:14.1.2 幻灯:第5页 System.Threading命名空间参考: http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfSystemThreading.asp System.Threading.Thread参考: http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemthreadingthreadclasstopic.asp IAsyncResult接口参考: http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemiasyncresultclasstopic.asp 讲授: 阅书:14.1.3 .Net的线程体系结构和普通Windows环境幻灯:第6页 下的体系结构稍有区别,.Net里有应用程序 域,这是.Net当中提出的一个新概念。进程是操作系统管理应用程序资源的一个单元。 在早期,它也是任务调度的单元,是实现多任务的执行单元,但后来为了提高运行效率,在进程内部又加入了线程的概念,所以线程是处于进程内部的,它是一个执行单元。现代操作系统的多任务调度都以线程为主,但是在.Net中,又稍有区别:.Net里,4
第14章 线程和异步编程
一个进程包含应用程序域,而应用程序域内部再包含线程。这个应用程序域的目的是什么?.Net中的应用程序域和传统的进程概念很类似,.Net应用程序启动后就称为一个进程,这个进程内部默认包含一个应用程序域,这个应用程序域里面包含一个线程,应用程序域的用途和传统的进程的概念是一致的,他是起到一个程序间隔离的作用。 讲解课本14.1.3 小结: 通过本节的学习,我们要对线程的一些基本常识有一定的了解。这为后面的学习奠定基础。 14.2在.NET中使用线程
教学提示 : 本节主要达到目的。
? 掌握线程启动,中断和终止及管理线程的方法。(精讲) ? 了解Thread类的各方面信息,例如属性和参数等。(精讲) ? 了解线程本地存储区的相关知识点。(略讲) 教学内容 讲授: 在本章的开头,我觉得我们有必要先介绍多用户处理的概念。 教学方法 阅书:14.2.1 幻灯:第8-9页 提示 ? 根据书本上的代码进行演示。 计算机技术刚发展的时候,没有多用户处理机制,也就是说,一个计算机同时只能运行 一个任务,程序只能一个一个按照顺序执行,因此就会有很多问题。首先,一个程序在运行的时候并不能充分利用计算机资源,而且有时需要等待外部的慢速设备,这时CPU就处于空闲状态,浪费了CPU的处理时间。由于计算机不能同时运行多个程序, 5