mirror of
https://gitee.com/jd-platform-opensource/asyncTool.git
synced 2026-03-22 12:27:15 +08:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
如果只是需要用这个框架,请往下看即可。如果需要深入了解这个框架是如何一步一步实现的,从接到需求,到每一步的思考,每个类为什么这么设计,为什么有这些方法,也就是如何从0到1开发出这个框架,作者在[csdn开了专栏](https://blog.csdn.net/tianyaleixiaowu/category_9637010.html)专门讲中间件如何从0开发,包括并不限于这个小框架。京东内部同事可在cf上搜索erp也能看到。
|
||||
|
||||
#### 基本组件
|
||||
worker: 一个最小的任务执行单元。通常是一个网络调用,或一段耗时操作。
|
||||
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
注意,该框架我已转移到公司账号:https://gitee.com/jd-platform-opensource/asyncTool 下。更新时会优先更新公司账号,本账号会不定期同步。
|
||||
|
||||
# 并行框架说明
|
||||
有问题、或者有特定的场景需求可以给作者发邮件说明,感谢您的意见。wuweifeng10@jd.com
|
||||
有问题、或者有特定的场景需求可以给作者发邮件说明,感谢您的意见。wuweifeng10@jd.com, liwangyang@jd.com
|
||||
|
||||
该框架目前正在 **京东App后台** 接受苛刻、高并发、海量用户等复杂场景业务的检验测试,随时会根据实际情况发布更新和bugFix。
|
||||
|
||||
有对区块链感兴趣的,可以参考项目作者另一个[GVP项目](https://gitee.com/tianyalei/md_blockchain),java区块链底层入门。
|
||||
|
||||
如果只是需要用这个框架,请往下看即可。如果需要深入了解这个框架是如何一步一步实现的,从接到需求,到每一步的思考,每个类为什么这么设计,为什么有这些方法,也就是如何从0到1开发出这个框架,作者在[csdn开了专栏](https://blog.csdn.net/tianyaleixiaowu/category_9637010.html)专门讲中间件如何从0开发,包括并不限于这个小框架。京东内部同事可在cf上搜索erp也能看到。
|
||||
|
||||
## 并行常见的场景
|
||||
1 客户端请求服务端接口,该接口需要调用其他N个微服务的接口
|
||||
@@ -73,7 +74,7 @@
|
||||
|
||||
注意:这个依赖关系是有必须和非必须之分的,还有一个重要的东西是执行单元不能重复执行。譬如图4,如果B执行完毕,然后执行了A,此时C终于执行完了,然后也到了A,此时就会发现A已经在执行,或者已经完毕(失败),那么就不应该再重复执行A。
|
||||
|
||||
还有一种场景,如下图,A和D并行开始,D先执行完了,开始执行Result任务,此时B和C都还没开始,然后Result执行完了,虽然B和C都还没执行,但是已经没必要执行了。B和C这些任务是可以被跳过的,跳过的原则是他们的NextWrapper已经有结果了或者已经在执行了。我提供了checkNextWrapperResult方法来控制,当后面的任务已经执行了,自己还要不要执行的逻辑控制。当然,这个控制仅限于nextWrapper只有一个时才有成立。
|
||||
还有一种场景,如下图,A和D并行开始,D先执行完了,开始执行Result任务,此时B和C都还没开始,然后Result执行完了,虽然B和C都还没执行,但是已经没必要执行了。B和C这些任务是可以被跳过的,跳过的原则是他们的NextWrapper已经有结果了或者已经在执行了。我提供了checkNextWrapperResult方法来控制,当后面的任务已经执行了,自己还要不要执行的逻辑控制。当然,这个控制仅限于nextWrapper只有一个时才成立。
|
||||
|
||||

|
||||
|
||||
@@ -88,7 +89,7 @@
|
||||
一组任务,虽然内部的各个执行单元的时间不可控,但是我可以控制全组的执行时间不超过某个值。通过设置timeOut,来控制全组的执行阈值。
|
||||
|
||||
## 并发场景可能存在的需求之——高性能、低线程数
|
||||
该框架全程无锁,没有一个加锁的地方。
|
||||
该框架全程无锁,不依靠线程锁来保证顺序。
|
||||
|
||||
创建线程量少。
|
||||
如这样的,A会运行在B、C执行更慢的那个单元的线程上,而不会额外创建线程。
|
||||
|
||||
Reference in New Issue
Block a user