




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1内容提要内容提要 实现线程 定义线程的生命周期 实现多线程 识别线程的优先级 在线程中使用同步 识别进程间的通信第1页/共47页2同时执行所有任务,时间更少,效率更高线程简介线程简介在同一时间点执行各项进程 编译程序 发送/接收邮件 打印文件 其他操作系统允许计算机同时执行多项操作程序(进程)第2页/共47页3线程简介线程简介程序 1 程序 2线程 1线程 2线程 3线程 1线程 2线程 3单独的执行路径第3页/共47页4进程和线程进程和线程 n进程是程序的一次执行进程是程序的一次执行n一个或多个线程构成一个进程一个或多个线程构成一个进程进程进程线程第4页/共47页5线程简介线程简介在以下情
2、况中可能要使用到多线程: l程序需要同时执行两个或多个任务l程序要等待某事件的发生,例如用户输入、文件操作、网络操作、搜索等l后台程序第5页/共47页6线程及多线程工作原理线程及多线程工作原理 线程表示计算机执行的指令序列。 一个处理器在某一刻只能处理一个任务。如果有一个多处理器系统,理论上它可以同时执行多个指令一个处理器执行一个指令,但大多数人使用的是单处理器计算机,这种情况是不可能同时发生的。而实际上,Windows操作系统表面上可以同时处理多个任务,这个过程称为抢先式多任务处理(pre-emptive multitasking)。第6页/共47页7抢先式多任务处理抢先式多任务处理 所谓抢
3、先式多任务处理,是指Windows在某个进程中选择一个线程,该线程运行一小段时间。Microsoft没有说明这段时间有多长,因为为了获得最好的性能,Windows有一个内部操作系统参数来控制这个时间值。但在运行Windows应用程序时,用户不需要知道它。从我们的角度来看,这个时间非常短,肯定不会超过几毫秒。这段很短的时间称为线程的时间片(time slice)。过了这个时间片后,Windows就收回控制权,选择下一个被分配了时间片的线程。这些时间片非常短,我们可以认为许多事件是同时发生的。 第7页/共47页8实现线程实现线程 线程被用来运行完成大型和复杂计算的程序。 使用一个线程执行的进程被称
4、为单线程进程,这里进程是一个程序的运行实例。 单线程程序一次仅可以完成一个任务。在另一个任务开始之前,你必须等待一个任务完成。第8页/共47页9实现线程实现线程 下图显示了单线程进程。 为了一次执行多于一个任务,你可以在程序中创建多个线程。 创建两个或更多线程的进程被称为多线程进程。第9页/共47页10C#中的线程模型中的线程模型 在单线程模型中,程序使用轮询来调用事件循环。 轮询是一个进程,在其中一次执行一个单一的事件。 在带有轮询方法的事件循环中,单一线程以无限循环的方式运行直到它的操作完成。 在单线程程序中,如果线程从执行被挂起因为它正在等待一个系统资源,整个程序停止执行。 在多线程中,
5、一个线程等待的CPU时间可以被用来完成另一个任务。第10页/共47页11C#中的线程模型中的线程模型 在CLR中有两种线程 System.Threading.Thread代表托管线程 System.Diagonostics.ProcessThread代表OS线程using System;class HelloWorld static void Main() Console.WriteLine (Hello, World); Console.ReadLine(); 第11页/共47页12主线程主线程 主线程在C#程序开始执行的时候被自动创建。 使用Thread类被排他创建的线程被称为子线程,其中
6、主线程被称为父线程或者基本线程。 你可以使用Thread类的CurrentThread属性来访问线程。第12页/共47页13使用线程使用线程 在C#中,通过ThreadStart创建线程调用方法的引用,并将该引用通过创建一个Thread类型的对象创建一个线程,接着调用新线程的Start()方法启动线程。ThreadStart ChildRef = new ThreadStart(ChildThreadCall);Thread ChildThread = new Thread(ChildRef);ChildThread.Start();引用System.Threading 命名空间Thread
7、线程实例名 = new Thread(new ThreadStart(方法名);只创建但不启动线程只创建但不启动线程线程实例名.Start();启动线程启动线程第13页/共47页14使用线程使用线程 新线程开始异步执行线程的方法调用。 线程的处理 启动线程(Start方法) 挂起线程(Suspend方法) 挂起不会立即生效 恢复被刮起的线程(Resume方法) 恢复不会立即生效 终止线程(Abort方法) 线程的休眠(Sleep方法)第14页/共47页15管理线程管理线程 有许多你可能需要完成的任务来管理线程的活动或生命。 可以通过使用Thread类的各种可用线程方法来管理这些任务。 Thre
8、ad.Sleep()静态方法调用静态CurrentThread方法,然后它在指定的时间内暂停线程。第15页/共47页16管理线程管理线程 临时挂起会话进程(用户通常不会这么做,但这仅是一个示例,在更真实的示例中,用户可能是暂停声音文件或视频文件的播放) 。 在主线程中编写如下代码,挂起该线程:depthChangeThread.Suspend(); 如果需要恢复该线程,可以使用下面的方法:depthChangeThread.Resume(); 如需要退出该线程depthChangeThread.Abort();第16页/共47页17线程使用示例线程使用示例using System;using
9、System.Threading;class BasicThreadApp public static void ChildThreadCall() try Console.WriteLine(Child thread started); Console.WriteLine(Child thread - counting to 10); for (int i = 0; i 10; i+) Thread.Sleep(500); Console.Write(0., i); Console.WriteLine(Child thread finished); catch (ThreadAbortExc
10、eption e) Console.WriteLine(Exception has caught); finally Console.WriteLine(Child Thread - unable to be finished); public static void Main() ThreadStart ChildRef = new ThreadStart(ChildThreadCall); Console.WriteLine(Main - Creating Child Thread); Thread ChildThread = new Thread(ChildRef); ChildThre
11、ad.Start(); Console.WriteLine(Main - Sleeping for 2 seconds); Thread.Sleep(2000); Console.WriteLine(n Main - Aborting child thread); ChildThread.Abort(); Console.ReadLine(); 第17页/共47页18线程生命周期线程生命周期 当System.Threading.Thread类的对象被创建的时候,线程的生命周期开始。线程的生命周期结束于任务的执行。 在线程的生命周期中有各种状态。这些状态是: 未启动状态 运行态 未运行态 死亡态
12、第18页/共47页19未启动状态未启动状态 当一个Thread类的实例被创建的时候,线程进入未启动状态。 新线程是Thread类的一个空对象,没有系统资源例如内存被分配给它。第19页/共47页20运行态运行态 线程一直处在未启动状态直到程序调用Thread类的Start()方法,它将线程置于运行态,并且立即返回控制到调用的线程。 这个状态也被称为准备或启动状态。 新启动的线程和程序中任何其它线程同时执行。第20页/共47页21Start()StartedWork CompletedStopped线程生命周期线程生命周期第21页/共47页22未运行态未运行态 如果它处于下面的状态,那么线程处于未
13、运行态 休眠 等待 阻塞第22页/共47页23Start()StartedSuspend()SuspendedResume()线程生命周期线程生命周期第23页/共47页24Start()StartedSleep()Wait/JoinSleepInterrupt()Time Expires线程生命周期线程生命周期第24页/共47页25死亡状态死亡状态 当线程方法的语句完成的时候,运行线程进入死亡状态。这个状态也被称为终结态。 程序可以通过在适当的线程对象上调用Thread类的Abort()方法来强迫线程进入死亡态。第25页/共47页26Start()StartedAbort()Stop Requ
14、estThread Responds to Stop RequestStopped线程生命周期线程生命周期第26页/共47页27介绍多线程介绍多线程 多线程有助于同时完成各种操作,节省用户的时间。 多线程允许你在一个程序中完成多个任务。 多任务是同时执行多个任务的能力。 多任务可以被分成如下类型: 基于进程的多任务 基于线程的多任务 该女士在同时吃苹果、看书该女士在同时吃苹果、看书并在电脑上工作。并在电脑上工作。第27页/共47页28多线程的优点和限制多线程的优点和限制 多线程的优点有: 改进性能 最小化系统资源 同时访问多个程序 程序结构简化 多线程的限制有: 竞态情况同时读写同一个变量 死
15、锁情况互相等待对方释放所需资源 饥饿锁低优先级的线程无限等待第28页/共47页29创建多线程示例创建多线程示例using System;using System.Threading;class ThreadSchedule public static void ChildThread1() Console.WriteLine(Child thread 1 started); Console.WriteLine(Child thread - counting from 1 to 10); for (int T = 1; T 11; T+) for (int Cnt = 0; Cnt 100; C
16、nt+) Console.Write(.); Console.Write(0, T); Console.WriteLine(Child thread 1 finished); public static void ChildThread2() Console.WriteLine(Child thread 2 started); Console.WriteLine(Child thread - counting slowly from 11 to 20); for (int T = 11; T 21; T+) for (int Cnt = 0; Cnt 0) /卖书过程 Thread.Sleep
17、(1000); num = num - 1; Console.WriteLine(售出一本); else Console.WriteLine(没有了); public class MyClasspublic class MyClass public static void Main() public static void Main() BookShop a = new BookShop(); BookShop a = new BookShop(); Thread t1 = new Thread(new Thread t1 = new Thread(new ThreadStart(aThreadStart(a.Sale); Sale); Thread t2 = new Thread(new Thread t2 = new Thread(new ThreadStart(aThreadStart(a.Sale); Sale); t1 t1.Start();Start(); t2 t2.Start();Start(); Console Console.Read();Read(); 第41页/共47页42同步注意问题同步注意问题 不要滥用同步 死锁 竞态条件 第42页/共47页43识别进程间的通信识别进程间的通信 进程是程序的一个运行实例。 运行时在同一计算机内或通过网络的进程间
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 畜禽疫病快速诊断方法研究-洞察阐释
- 2025年中国太阳能仪表行业市场深度分析及发展前景预测报告
- 中国高低压电器行业市场深度研究及投资战略规划建议报告
- 2025年中国SMD电感器行业市场发展前景及发展趋势与投资战略研究报告
- 中国陶粒行业市场调查研究及投资前景预测报告
- 中国采棉机行业市场调查研究及投资前景展望报告
- 2025年中国功放盒行业市场发展前景及发展趋势与投资战略研究报告
- 中国非贵重金属烟盒行业市场发展前景及发展趋势与投资战略研究报告(2024-2030)
- 教育心理学在提升微课质量中的作用研究
- 2025年中国菠萝蜜干果市场供需现状及投资战略研究报告
- 天津市西青区2024年七年级下学期数学期末试题附答案
- 《浮力》名师课件
- (高清版)TDT 1012-2016 土地整治项目规划设计规范
- 网络与信息安全管理员(四级)考试题库附答案
- 2024版《安全生产法》考试题库附答案(共130题)
- 2024年内蒙古北方联合电力有限责任公司招聘笔试参考题库含答案解析
- 建设养老院项目计划书
- 房建工程监理大纲范本(内容全面)
- 学校会议室改造项目投标方案(技术标)
- 儿童乐园安全管理制度
- 【医学课件】外科营养支持
评论
0/150
提交评论