ASP.
NET多线程编程(一)
讲师:邵志东
课前准备
DotNetFrameWorkVS.NET2002/2003C#/
VB.NETLevel200
议程
线程原理概述.NET下的多线程编程异步编程ASP.NET多线程编程
线程基本概念
线程是
程序执行的基本原子单位.一个进程可以由多个线程组成.每个线程都维护异常处理程序,调度优先级和一组
系统用于在调度该线程前保存线程上下文的结构.线程上下文包括为使线程在线程的宿主进程地址空间中无缝地继续执行所需的所有信息,包括线程的CPU寄存器组和堆栈.在分布式编程中,正确使用线程能够很好的提高应用程序的性能及运行效率.实现原理是将一个进程分成多个线程,然后让它们并发异步执行,来提高运行效率.并发执行并不是同时执行(占有CPU),任意时刻还是只能有一个线程占用CPU,只不过是它们争夺CPU频繁一些,感觉到他们似乎都在运行.
进程举例
设一个进程要完成两个任务:任务1和任务2,并且任务1要经历:A1->B1->C1三个步骤才能完成;任务2要经历:A2->B2->C2三个步骤才能完成.1.如果两个任务同步执行的话完成两个任务是这样执行的:花费时间段:123456A1->B1->C1->A2->B2-C2这样从A1一直到c2只能一个一个地执行.当A1占用CPU执行时,从B1到C2线程只能在等待.2.如果两个任务异步执行的话,完成两个任务是这样执行的:花费时间段:123456A1->B1->C1A2->B2->C2这样,任务1和任务2就分成两个独立的执行对象.
什么时候用线程?
一般情况下,如果多个线程在执行时都要抢占某一个资源或某几个资源,则最好不用异步线程执行.因为它们是并发执行,很可能同时争夺某个资源有CPU,这时要么执行资源分配算法(比如要判断哪个线程优先级高,这要花费时间),或者是按时间片算法(这样要付出轮询CUP/交接/让出CPU所需的时间).如果多个线程所需要的系统资源是比较均匀的,这时完全可以让它们异步并发执行,
使用线程的缺点
统将为进程和线程所需的上下文信息使用内存.因此,可以创建的进程,AppDomain对象和线程的数目会受到可用内存的限制.跟踪大量的线程将占用大量的处理器时间.如果线程过多,则其中大多数线程都不会产生明显的进度.如果大多数当前线程处于一个进程中,则其他进程中的线程的调度频率就会很低.使用许多线程控制代码执行非常复杂,并可能产生许多错误.销毁线程需要了解可能发生的
问题并对那些问题进行处理.
议程
线程原理概述.NET下的多线程编程异步编程ASP.NET多线程编程
.NET下的多线程编程
Thread类的使用带参数线程委托与线程应用程序域临界区操作
System.Threading
提供一些使得可以进行多线程编程的类和接口.此命名空间包括管理线程组的ThreadPool类,使得可以在指定的时间后调用委托的Timer类以及用于同步互斥线程的Mutex类.System.Threading还提供用于线程调度,等待通知和死锁解析的类.usingSystem.Threading;
Thread类
a.启动线程:即新建并启动一个线程:
–Threadthread1=newThread(newThreadStart(Count));其中的Count是将要被新线程执行的函数.
b.杀死线程
–在杀死一个线程前最好先判断它是否还活着(通过IsAlive属性),然后就可以调用Abort方法来杀死此线程.
c.暂停线程
–即让一个正在运行的线程休眠一段时间.如thread.Sleep(1000);就是让线程休眠1秒钟.
d.优先级
–Thread类中ThreadPriority属性,它用来设置优先级,但不能保证操作系统会接受该优先级.一个线程的优先级可分为5种:Normal,AboveNormal,BelowNormal,Highest,Lowest.
e.挂起线程
–Thread类的Suspend方法用来挂起线程,直到调用Resume,此线程才可以继续执行.如果线程已经挂起,那就不会起作用.