- 0
- 0
- 约3.79千字
- 约 22页
- 2021-03-11 发布于黑龙江
- 举报
ASP.NET多线程编程(二)
讲师:邵志东
课前准备
• Dot Net FrameWork
• VS.NET 2002/2003
• C#/VB.NET
• Level 200
议程
• 线程池
• ASP.NET中多线程使用实例
– 利用多线程实现数组排序
– 利用多线程实现搜索引擎
– 在线用户检测
– 利用多线程实现端口扫描
– 利用多线程对treeview填充
线程基本概念
• 线程是程序执行的基本原子单位. 一个进程可以由多个线
程组成.
• 每个线程都维护异常处理程序、调度优先级和一组系统用
于在调度该线程前保存线程上下文的结构。线程上下文包
括为使线程在线程的宿主进程地址空间中无缝地继续执行
所需的所有信息,包括线程的CPU 寄存器组和堆栈。
• 在分布式编程中,正确使用线程能够很好的提高应用程序
的性能及运行效率.实现原理是将一个进程分成多个线
程,然后让它们并发异步执行,来提高运行效率.
• 并发执行并不是同时执行( 占有CPU),任意时刻还是只能
有一个线程占用CPU,只不过是它们争夺CPU频繁一些,
感觉到他们似乎都在运行.
进程举例
设一个进程要完成两个任务:任务1和任务2,并且任务1
要经历: A1-B1-C1三个步骤才能完成;任务2要经历:
A2-B2-C2三个步骤才能完成。
1. 如果两个任务同步执行的话完成两个任务是这样执行的:
花费时间段: 1 2 3 4 5 6
A1-B1-C1-A2-B2-C2
这样从A1一直到c2只能一个一个地执行. 当A1 占用CPU
执行时,从B1到C2线程只能在等待.
2. 如果两个任务异步执行的话,完成两个任务是这样执行的:
花费时间段: 1 2 3 4 5 6
A1-B1-C1
A2-B2-C2
这样,任务1和任务2就分成两个独立的执行对象.
什么时候用线程?
• 一般情况下,如果多个线程在执行时都要抢占某
一个资源或某几个资源,则最好不用异步线程执
行.因为它们是并发执行,很可能同时争夺某个资
源有CPU,这时要么执行资源分配算法(比如要判
断哪个线程优先级高,这要花费时间),或者是按时
间片算法(这样要付出轮询CUP/交接/让出CPU
所需的时间).
• 如果多个线程所需要的系统资源是比较均匀的,
这时完全可以让它们异步并发执行,
使用线程的缺点
• 统将为进程和线程所需的上下文信息使用内存。
因此,可以创建的进程、AppDomain 对象和线
程的数目会受到可用内存的限制。
• 跟踪大量的线程将占用大量的处理器时间。如果
线程过多,则其中大多数线程都不会产生明显的
进度。如果大多数当前线程处于一个进程中,则
其他进程中的线程的调度频率就会很低。
• 使用许多线程控制代码执行非常复杂,并可能产
生许多错误。
• 销毁线程需要了解可能发生的问题并对那些问题
进行处理。
线程池
• 许多应用程序创建的线程都要在休眠状态中消耗大量时
间,以等待事件发生。这样会浪费资源。
• 线程池通过为应用程序提供一个由系统管理的辅助线程池
使您可以更为有效地使用线程。一个线程监视排到线程池
的若干个等待操作的状态。当一个等待操作完成时,线程
池中的一个辅助线程就会执行对应的回调函数。
• 实际上,如果要执行一些需要多个线程的较短任务,则使
用ThreadPool 类是利用多个线程的最方便且最好的方法。
使用线程池使系统能够不仅针对此进程而且针对计算机上
的其他进程(您的应用程序对其一无所知)对此情况进行
优化以达到更好的吞吐量。使用
原创力文档

文档评论(0)