聚合全网技术文章,根据你的阅读喜好进行个性推荐
既然任务之间有依赖,把有依赖关系的任务放到一个线程中不就好了?
1.放在同一线程同步执行
2.使用状态来标识处理任务完成,至于放内存还是数据库,你自己看
如果确实需要任务依赖,可以有很多方法。。例如 建立通信机制。。
如果是普遍存在的情况,可以参考 JDK7 或以上版本自带的 Fork/Join 并行计算框架。。
基本上都是基于消息通信机制的处理方法。。例如,A 出现异常,异常是可以捕捉的,然后向外发布消息,任务B 侦听消息,根据不同消息进行不同处理。。
CountDownLatch 如果你之前的都执行完了 减一不就行了么
http://blog.csdn.net/hikvision_java_gyh/article/details/9953691
我曾经搞过这个东西,主要是解决分布式任务调度的。和你的场景一模一样。只不过是分布式的。
解决依赖关系有很多种做法,我用的是DAG拓扑解法,把整个任务(Job)看成一个有向无环图,节点就是含有依赖关系的逻辑任务(Task)。然后对这个图进行拓扑排序(序列不唯一)
如图:
比如一个Job包含4个逻辑Task(A,B,C,D)。那么拓扑的序列为:(a->b->c->d或a->c->b->d)其中b,c可以并发执行。
这个算法的好处是可以将任意复杂的依赖任务抽象成DAG,拓扑算法会帮你梳理好依赖,并且告诉你哪些可以并发计算,哪些任务是坏任务(有环)
可以参考我以前写的一个帖子 http://www.oschina.net/question/147822_153289
用lua写的,你可以改造成java版本的。
最后友情提示下:还有依赖关系的任务,事务回滚要好好想一下。(因为涉及到并发执行的任务)
如果只是提交SQL执行 建议直接做一个批量任务提交入口 上传一个SQL文本直接跑
当然你要说你的系统足够复杂,好多个库什么的 那你看着办吧...
既然任务之间有依赖,把有依赖关系的任务放到一个线程中不就好了?
1.放在同一线程同步执行
2.使用状态来标识处理任务完成,至于放内存还是数据库,你自己看
如果确实需要任务依赖,可以有很多方法。。例如 建立通信机制。。
如果是普遍存在的情况,可以参考 JDK7 或以上版本自带的 Fork/Join 并行计算框架。。
基本上都是基于消息通信机制的处理方法。。例如,A 出现异常,异常是可以捕捉的,然后向外发布消息,任务B 侦听消息,根据不同消息进行不同处理。。
CountDownLatch 如果你之前的都执行完了 减一不就行了么
http://blog.csdn.net/hikvision_java_gyh/article/details/9953691
我曾经搞过这个东西,主要是解决分布式任务调度的。和你的场景一模一样。只不过是分布式的。
解决依赖关系有很多种做法,我用的是DAG拓扑解法,把整个任务(Job)看成一个有向无环图,节点就是含有依赖关系的逻辑任务(Task)。然后对这个图进行拓扑排序(序列不唯一)
如图:
比如一个Job包含4个逻辑Task(A,B,C,D)。那么拓扑的序列为:(a->b->c->d或a->c->b->d)其中b,c可以并发执行。
这个算法的好处是可以将任意复杂的依赖任务抽象成DAG,拓扑算法会帮你梳理好依赖,并且告诉你哪些可以并发计算,哪些任务是坏任务(有环)
可以参考我以前写的一个帖子 http://www.oschina.net/question/147822_153289
用lua写的,你可以改造成java版本的。
最后友情提示下:还有依赖关系的任务,事务回滚要好好想一下。(因为涉及到并发执行的任务)
如果只是提交SQL执行 建议直接做一个批量任务提交入口 上传一个SQL文本直接跑
当然你要说你的系统足够复杂,好多个库什么的 那你看着办吧...