io调度maple调度程序
许多项目需要计划功能,例如我们计划的工作,重复的工作,异步执行等。
我们的首选方法是使用企业作业调度程序,例如OpenSymphony的Quartz。
使用计划任务进行编码时,最棘手的部分之一是执行部分。 这里的主要经验法则是注意将要执行的实际代码。 调度框架在后台使用工作线程,以便异步执行代码。 例如,Quartz企业作业调度程序维护由主“控制器”线程监视的工作线程池。
您应该记住,调度的作业本质上是异步的,因此引入异步执行层是我们表示保持工作整洁的首选方式。
在过去的很多次中,我们都遇到了这样的难题:让调度框架工作线程执行实际代码,或者实现替代的异步执行层。 每种方法都有其优点和缺点。
使用调度框架执行实际代码,优点:
- 需要更少的实施工作
- 工作线程由框架“控制器”线程监视
- 实施代码在准确的预定时间执行
使用调度框架执行实际代码,缺点:
- 实现代码与调度框架共存
- 对于“长期存在”的实现代码,例如与外部系统的通信,“繁忙时间”的数据库查询,文件解析,循环等,会引起主要问题,您可能会用尽调度框架工作程序线程,尤其是在这种情况下在短时间间隔内重复工作。
我们想认为调度框架应该充当“调度程序”而不是“执行者”。 计划框架的主要职责应该是在适当的时间“触发”执行事件。 应使用事件侦听器执行代码的实际执行。
实现此设计模式的最佳方法是使用异步JMS消息传递。 计划框架工作线程应在执行时将消息插入JMS队列。 JMS侦听器线程应在收到消息后执行实际代码。 这样做会由于JMS的读/写开销而在实际代码执行之前引入一些延迟,但是“长期存在”的实现代码不会对调度框架造成任何问题。
翻译自: https://www.javacodegeeks.com/2010/05/scheduling-principals-in-java.html
io调度maple调度程序