电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>异步任务处理在复杂Web应用中的研究设计

异步任务处理在复杂Web应用中的研究设计

2017-10-24 | rar | 0.6 MB | 次下载 | 1积分

资料介绍

在Web应用中,某些功能的实现逻辑很复杂、执行比较耗时[1],例如涉及外部系统调用、多数据源等;此时,希望可以让这些复杂的业务逻辑放在后台执行,而前台与用户的交互可以不用等待,从而提高用户体验;或者需要以一定时间间隔重复运行任务、或在每天的指定时间运行任务的情况。为此,需要控制大型任务对服务器资源的消耗,降低Web服务器的并发连接数目,这就需要将大型任务的提交和执行分开,使服务器接受任务后立即断开与客户端的连接,减少服务器的并发连接数,而任务则推迟到服务器资源许可时执行,以抑制服务器资源的峰值消耗。
  为尽量减少耗时操作对执行的影响,本文提出了异步任务的处理,使用多线程来管理耗时任务,作为后台进程执行;同时把任务信息都持久化在数据库中,保证了异步任务处理的灵活性、可靠性。
  1 多线程
  1.1线程池
  一个线程是程序中的一条执行流,是操作系统分配处理器的基本单位。并发是程序中多条执行流的同时推进,多任务并发对应多线程并发[2]。
  但是为每个任务创建一个线程,当任务完成时撤消对应的线程存在明显的缺陷。线程的创建需要一定的时间,给任务请求的响应带来延迟,线程的创建和撤消也给操作系统带来额外的管理负担,若频繁“创建和撤消”,则将明显增加系统的额外开销。为有效降低线程重复创建和撤销方面的开支可以采用线程池技术。
  线程池技术提供了一种较好的解决方案[3]:系统维护由若干个线程组成的线程池。当有任务请求到达时,由池中的一个线程为之运行,在任务完成后不是将该线程撤消而是将其归还线程池,使之能够为后续到达的任务服务;若线程池中没有空闲的线程,则任务进入等待状态直到有空闲的线程。
  1.2 Java中的线程池实现机制
  Java在语言级实现了功能丰富的多线程编程机制[4],对线程池的建立和维护提供了强大的支持。特别在JDK1.5及以后的版本中,任务执行抽象的首选不再是Thread,而是Executor。Executor虽是一个简单的接口,但它提供了异步任务执行框架并支持多种不同类型的任务执行策略,ExecutorService接口和ScheduledExecutorService接口对Executor进行了扩展,添加了管理线程执行和调度线程池的若干方法。通过Executors工具类提供的静态工厂方法可以创建符合特定需求的基于线程池执行框架。
  newChachedThreadPool()方法用于创建可缓存线程池的执行框架。当新的请求任务到达时,执行框架将尽可能地重用池中的空闲线程,若此时池中没有空闲线程,则添加新线程,这个方法对池的大小没有限制。另一方面,该执行框架能够自动回收空闲时间超过60 s的线程,以合理使用系统资源。对于执行大量短异步任务的程序而言,这种方式的线程池通常可提高性能。
  newFixedThreadPool(int nThreads)方法建立的执行框架中的线程池具有固定数量的线程。每提交一个任务它就创建一个线程,直到达到池的限定值nThreads,线程池的长度不再变化,新到达的任务在一个遵循先来先服务(FIFS)规则的无界队列中等待执行。
  newScheduledThreadPool(int nThreads)方法建立的执行框架中的线程池也是定长的,它支持定时的以及周期性的任务的执行。
  这些工厂方法返回的Executor 都是ThreadPoolExecutor()类的常用实例,能满足大部分线程池的应用需求。
  2 设计思路
  为保证异步任务处理的灵活性和可靠性,本文设计的思路为:任务持久化+Java线程池+任务调度。
  2.1 任务持久化
  将待处理的任务信息保存在可信任的数据库中,同时要确保当任务处理服务器出问题后这些未执行成功、或未开始执行的任务不会被丢失。
  2.2 任务调度
  当任务信息都持久化在数据库中之后,需要将这些信息读取出来执行具体的业务逻辑操作,本文通过ScheduledExecutorService来实现对任务的循环调度,例如可采取每隔2 min扫描一次待处理任务列表,若有记录则提取出来执行。
  3 具体实现
  异步任务处理中各组成部分在运行过程中的调用关系如图1。
  异步任务处理在复杂Web应用中的研究设计
  当客户端访问服务器时,有耗时操作的任务,则把该任务放入数据库中。服务器每隔一段时间轮询存放待处理任务的表,若表中有任务,则任务调度线程池采用多线程机制来执行该任务。任务执行成功后,删除待处理任务表中的该任务信息,否则把该任务信息更新到任务失败表,进行人工干预。
  3.1 任务数据表
  建两张表,一张task表,用来存放待处理的任务;一张task_fail表用来存放失败的任务。两张表的结构一样,结构如表1所示。
  异步任务处理在复杂Web应用中的研究设计
  task表主要用来保存所有待处理的任务,每条任务信息属于一种任务类型,由task_handle字段标识,任务类型值为该类型任务的具体实现类名。task_params 字段提供了执行该任务需要的所有参数,为字符串,需要在具体任务实现类中解析。handle_time字段提供了任务待执行的日期。
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1TC358743XBG评估板参考手册
  2. 1.36 MB  |  330次下载  |  免费
  3. 2开关电源基础知识
  4. 5.73 MB  |  6次下载  |  免费
  5. 3100W短波放大电路图
  6. 0.05 MB  |  4次下载  |  3 积分
  7. 4嵌入式linux-聊天程序设计
  8. 0.60 MB  |  3次下载  |  免费
  9. 5基于FPGA的光纤通信系统的设计与实现
  10. 0.61 MB  |  2次下载  |  免费
  11. 6基于FPGA的C8051F单片机开发板设计
  12. 0.70 MB  |  2次下载  |  免费
  13. 751单片机窗帘控制器仿真程序
  14. 1.93 MB  |  2次下载  |  免费
  15. 8基于51单片机的RGB调色灯程序仿真
  16. 0.86 MB  |  2次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33564次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21548次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6653次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537796次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191185次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183278次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费