java 任务调度 框架比较多 那个 最好用呢 .. quartz 吗。谁能给我推荐一下呢。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 任务调度 框架比较多 那个 最好用呢 .. quartz 吗。谁能给我推荐一下呢。相关的知识,希望对你有一定的参考价值。
效率得高.
使用得简单.
谁能推荐一下呢.
没有的话我就用quartz了.
先谢谢了.
很感谢大家。我也想用quartz
比较简单
不过 头 说了还有没有其他的调度框架呢。
能推荐一下吧。
我正在一个个的试用。。比较。。
Quartz支持Cron表达式定义时间点也支持SimpleTrigger对应时间点,可以很精确的定义时间点。
Quartz支持集群,可以在多个服务器(连同一个数据库)自动分配到不同的服务器上执行。
Quartz支持多种错误处理形式(如错误后下次不执行、马上重新执行、下次继续执行等)
Quartz支持多种漏触发处理(如关机漏触发情况)
Quartz还有很多优点,同类框架基本和他没有可比性 参考技术A quartz 使用的最广 。spring框架对quartz也有很好的支持。
我上家公司就是用了此框架。暂时没有发现啥缺点哦。 参考技术B quartz 很好用,任务配置也很灵活简单。用过很多次了。
linux内核 进程调度
概念:
进程调度决定那个进程投入运行,运行多长时间。
进程调度没有太复杂的原理,最大限度的利用处理器时间的原则是:只要有可执行的程序,那么总会有进程在执行,如果可运行的进程比处理器数目要多,那么注定要有部分进程在等待。
多任务操作系统:
抢占式多任务模式:由调度系统来决定那个进程在运行。
非抢占式多任务模式:进程自身决定何时停止对CPU的占用。
linux是抢占式的。
调度算法
linux上主要有两大类调度算法,CFS(完全公平调度算法)和实时调度算法。
CFS
cfs定义了一种新的模型,它给cfs_rq(cfs的run queue)中的每一个进程安排一个虚拟时钟,vruntime。如果一个进程得以执行,随着时间的增长(也就是一个个tick的到来),其vruntime将不断增大。没有得到执行的进程vruntime不变。
而调度器总是选择vruntime跑得最慢的那个进程来执行。这就是所谓的"完全公平"。为了区别不同优先级的进程,优先级高的进程vruntime增长得慢,以至于它可能得到更多的运行机会。
CFS使用红黑树来组织可运行的任务,可以想象为按照vruntime排序的红黑树,内容是进程的PID。这样保证CFS可以很快的找到vruntime最小的进程,并且拿出来投入运行。
了解一个大概就可以了,详细实现可以参考:http://www.cnblogs.com/tianguiyu/articles/6091378.html
实时调度算法
了解:实时调度算法是一种静态优先级的算法,为了满足快速响应。linux尽量保证这些进程总能在抢占中成功。
随眠和唤醒
睡眠(被阻塞)是一种特殊的不可执行状态。这点非常重要,如果没有睡眠状态,调度程序如果有可能选择出一个暂时不愿意被执行的进程,睡眠就必须使用轮询的方式来实现了。
linux的睡眠是通过等待队列来实现的。等待队列和任务队列一样,也是一个双端循环链表。进程执行睡眠操作,会把自己放入等待队列:下次调度的时候,调度器会忽略等待队列中的进程。
等待队列中的任务不会自动被唤醒,而是需要其他进程调用唤醒方法来唤醒,唤醒方法可以唤醒等待队列上随机一个进程,或者所有进程。唤醒操作会修改进程的状态为可运行,然后把此进程放入红黑树。
我的理解:一般是一个进程下的所有线程(对linux来说,也是进程)相互协调工作,举例来说,对于锁,阻塞在这个锁的所有线程都将进入同一个等待队列,一旦另外的线程释放了锁,那么其他线程(如主进程)会负责唤醒这个等待队列上的线程去抢占锁。
上下文切换
进程切换的时候,将上一个进程的处理器状态保存,然后切换到下一个进程的处理器状态,包含但不局限于:栈信息,程序计数器,寄存器信息。
以上是关于java 任务调度 框架比较多 那个 最好用呢 .. quartz 吗。谁能给我推荐一下呢。的主要内容,如果未能解决你的问题,请参考以下文章