Merge remote-tracking branch 'origin/master'

This commit is contained in:
wuweifeng10
2020-04-20 11:51:16 +08:00
2 changed files with 7 additions and 4 deletions

View File

@@ -1,3 +1,5 @@
如果只是需要用这个框架请往下看即可。如果需要深入了解这个框架是如何一步一步实现的从接到需求到每一步的思考每个类为什么这么设计为什么有这些方法也就是如何从0到1开发出这个框架作者在[csdn开了专栏](https://blog.csdn.net/tianyaleixiaowu/category_9637010.html)专门讲中间件如何从0开发包括并不限于这个小框架。京东内部同事可在cf上搜索erp也能看到。
#### 基本组件
worker 一个最小的任务执行单元。通常是一个网络调用,或一段耗时操作。

View File

@@ -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只有一个时才成立。
![输入图片说明](https://images.gitee.com/uploads/images/2020/0217/183223_de7e3fa7_303698.png "屏幕截图.png")
@@ -88,7 +89,7 @@
一组任务虽然内部的各个执行单元的时间不可控但是我可以控制全组的执行时间不超过某个值。通过设置timeOut来控制全组的执行阈值。
## 并发场景可能存在的需求之——高性能、低线程数
该框架全程无锁,没有一个加锁的地方
该框架全程无锁,不依靠线程锁来保证顺序
创建线程量少。![输入图片说明](https://images.gitee.com/uploads/images/2019/1226/093227_9633e2a8_303698.png "屏幕截图.png")
如这样的A会运行在B、C执行更慢的那个单元的线程上而不会额外创建线程。