java 任务调度 框架比较多 那个 最好用呢 .. quartz 吗。谁能给我推荐一下呢。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 任务调度 框架比较多 那个 最好用呢 .. quartz 吗。谁能给我推荐一下呢。相关的知识,希望对你有一定的参考价值。

效率得高.
使用得简单.
谁能推荐一下呢.
没有的话我就用quartz了.
先谢谢了.
很感谢大家。我也想用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 吗。谁能给我推荐一下呢。的主要内容,如果未能解决你的问题,请参考以下文章

那个浏览器最好用呢 我现在用的是360、、、???

Golang开源定时任务调度框架robfig/cron优化

Java多线程基础之任务调度

分布式任务调度框架选型,如何选择一个合适的框架?

Quartz怎么设置多任务

任务调度开源框架Quartz动态添加修改和删除定时任务