卓跃教育线程封装.ppt

卓跃教育线程封装.ppt

ID:56529244

大小:239.50 KB

页数:17页

时间:2020-06-27

卓跃教育线程封装.ppt_第1页
卓跃教育线程封装.ppt_第2页
卓跃教育线程封装.ppt_第3页
卓跃教育线程封装.ppt_第4页
卓跃教育线程封装.ppt_第5页
资源描述:

《卓跃教育线程封装.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十三章 线程封装本章内容线程池基本概念线程池组成部分线程池工作原理线程池设计注意点任务的通用性线程创建和销毁策略任务分配策略线程池基本概念线程池是预先创建线程的一种技术。线程池在任务还没有到来之前,创建一定数量(N)的线程,放入空闲队列中。这些线程都是处于阻塞(Suspended)状态,不消耗CPU,但占用较小的内存空间。当新任务到来时,缓冲池选择一个空闲线程,把任务传入此线程中运行;如果缓冲池已经没有空闲线程,则新建若干个线程。当系统比较空闲时,大部分线程都一直处于暂停状态,线程池自动销毁一部分线程,回收系统资源

2、。线程池组成部分线程池类维护工作者线程队列(包括空闲与忙碌队列)维护一个任务队列维护一个线程池调度器指针线程池调度器(本身也是一个线程)负责线程调度负责任务分配工作者线程类(线程池中的线程类的封装)任务队列任务接口(实际的业务逻辑都继承自该接口)线程池工作原理3-1线程池类至少提供三个接口,初始化线程池、销毁线程池、添加任务接口初始化线程池开启线程池调度器线程预先创建N个线程(由线程调度池器类负责创建线工作者线程),放入空闲线程队列指定最大的忙碌状态的线程数销毁线程池释放空闲队列中的线程与工作状态中的线程释放调度器线程

3、添加任务添加一实际任务,但是并没有立刻运行该任务,只是放入任务队列,由线程池调度器从任务队列获取该任务,并从线程池中获得一个线程来运行该任务,这里实际上是一种生产者消费者模型。线程池工作原理3-2线程池调度器包含创建空闲线程、销毁空闲线程接口线程池调度器本身也是一个线程,主要负责任务调度与线程调度,其工作过程大致如下:从任务队列获取任务,如果队列为空,阻塞等待新任务到来队列不为空,取出该任务,从空闲线程队列取一线程,如果为空,判断工作者线程数是否达到上限,如果没有,则创建若个空闲线程,否则等待某一任务执行完毕,并且该任

4、务对应的线程归还给线程池获得空闲工作者线程,将任务交给工作者线程来处理,工作者线程维护一任务指针,这里只要该指针指向任务,并且唤醒线程判断空闲工作者线程数是否超过最大工作者线程数,如果超过,销毁(空闲线程数-允许最大空闲线程数)个线程线程池工作原理3-3任务接口是一个抽象类,只有一个虚函数run方法,执行的是实际的业务逻辑工作者线程维护一任务指针,工作者线程的任务主要是运行任务对象的run方法。当线程池调度器调度一个工作者线程后,就唤醒工作者线程,并调用run方法来执行实际的业务逻辑,当run方法执行完毕,即业务逻辑处

5、理结束,将工作者线程归还到空闲线程池队列,而不是销毁。这样线程池调度器下一次就有机会调度到该工作者线程。线程池设计注意点任务的通用性线程创建和销毁策略任务分配策略任务的通用性2-1不同的业务解决方案有各自独特的任务处理方法,任务的划分上也就千差万别。为了使得在处理任务对象的时候达到一定程度的通用性,任务对象的设计上必须与实际任务的处理逻辑完全无关。从任务执行的角度看,任务不过是处理流程的一次或者多次执行的过程,可以这样来定义如下任务接口classITask{virtualboolrun()=0;}任务的通用性2-2任务

6、在其需要的时候才创建。任务的创建通过new操作,动态创建具体的任务对象,然后传入线程池,由线程池自动分配线程来执行此任务。任务是否执行完毕由其自身来决定。一个未知任务什么时候执行完毕是不可能预测的,必须任务本身来决定。这个策略通过,run()的返回值来实现。当工作线程执行一次任务时,如果返回值为true,表示任务执行完毕,就用delete操作销毁此任务;如果返回值为false,表示任务需要执行的工作并未完成,继续执行此任务。这样的策略,使得在设计新的任务处理流程的时候,不需要过多的关心任务的接口规范,只需要在新任务类的

7、构造函数中初始化各种资源,在新任务类的析构函数中回收资源,在run()方法中实现主要的处理逻辑,那么新的任务类即可在线程池中执行。线程创建和销毁策略在缓冲池刚刚建立时,线程池中有一定数量(N1)的已创建好的线程,这样可以使得新任务可以及时的得到执行。估计出平均情况下,一次业务产生的任务数量N2。那么N1应该是N2的整数倍,N1=N2×n1在线程缓冲池中的所有线程都处于繁忙状态的时候,线程池就会创建新的线程,设创建N2个。由以上分析,为了减少由于线程不够而再创建线程的概率,N3也应该是N2的整数倍,N3=N2×n2。当服

8、务器业务减少,出现大量线程闲置的情况,就应该销毁一部分线程。很显然,这里应该使用超时策略,当某些线程在超过时间T仍然处于闲置状态,就销毁一部分空闲线程。设销毁N4个空闲线程,为了减少由于线程不够而再创建线程的概率,N4也应该是N2的整数倍,N4=N2×n3。当然,为了使得新任务及时得到处理,即使服务器一直处于空闲,也应该保留N1个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。