During myTask performance optimization, I realized that currently the read implementation of 5 expanded nodes: Userstatus, document history, document item, attachment etc are done sequentially.

如果看看现在 Java8的parallelStream 的一些sample code, 再来review task offline 5个node的读取, 发现它们也满足并行计算的三要素:

(1) 可重入
(2) Immutable state
(3) Read only data access

因此我们可以考虑把每个node 数据的读取分别放到一个"新线程"(用ABAP术语来讲,应该是新的internal session )来做,这样就和gateway 后台实现batch操作的设计完全一致了。Gateway在SPRO里有个配置控制batch request是串行还是并行实现,默认是并行。
理论上假设5个node 分别消耗的时间是1,2,3,4,5秒. 现在的串行实现,最后的时间是sum(1,2,3,4,5) = 15秒,改成并行处理后是max(1,2,3,4,5) 约等于5秒(加上少许线程同步的时间)
具体的测试report参考AG3 report ZATTACHMENT_SEQUEN_VS_PARALL:

测试结果

AG3上取440个attachment,一次用串行的方式执行,另一次分成4个线程分别执行,每个线程里仍然call的未优化的代码。用代码比较确保两次执行返回的结果完全一致。

详细测试数据如下:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

ABAP并发计算的一个实例相关推荐

  1. exchange java对象,【原】Java并发程序的一个应用Exchanger的实例

    [原]Java并发程序的一个使用Exchanger的实例 今天看了些Exchanger的资料,有个喝水的例子不错.我这里细化了以下,并得到实现. 思路: 有一个Drinker和一个Waiter,有两个 ...

  2. 一个高并发买票的实例

    2.一个高并发买票的实例:  马克-to-win:我 们现在回到春节高并发买票的问题.我们假设有一百万个人买一百张票,其中买票程序一百万个线程同时运行.不用改变mysql的缺省事务隔离级别.任何人在 ...

  3. 《JavaScript入门经典(第4版)》上第5章一个实例程序的修正,完善

    今日,做<JavaScript入门经典(第4版)>第5章上的一个例题,感觉书上的代码有个小错误. 这是ch5_examp5.html上的一个实例,是计算一个数x保留y小数位后,四舍五入的结 ...

  4. 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用

    2016年时,Jerry曾经写过一系列关于SAP Fiori Smart Template(现在更名为Fiori Elements了)的博客,介绍了所谓的MDD开发方法论 - Metadata Dri ...

  5. python ks值计算_利用Python计算KS的实例详解

    在金融领域中,我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布.好的信用风控模型一般从准确性.稳定性和可解释性来评估模型.sOf免费资源网 一般来说.好人样本的分布同坏人样本的分布应该是有很 ...

  6. 《Python Cookbook 3rd》笔记(3.13):计算最后一个周五的日期

    计算最后一个周五的日期 问题 你需要查找星期中某一天最后出现的日期,比如星期五. 解法 Python 的 datetime 模块中有工具函数和类可以帮助你执行这样的计算.下面是对类似这样的问题的一个通 ...

  7. java中thread实例_Java多线程并发执行demo代码实例

    主类:MultiThread,执行并发类 package java8test; import java.util.ArrayList; import java.util.List; import ja ...

  8. 服务器系统怎么做高并发,QPS 高并发 如何设计一个支撑高并发大流量的系统?...

    QPS 高并发 如何设计一个支撑高并发大流量的系统? 高并发架构相关概念 什么是并发? 并发是指并发的访问,也就是某个时间点,有多少个访问同时到来: 通常如果一个系统的日PV在千万以上,有可能是一个高 ...

  9. 并发计算 VS 并行计算

    写在前面 上一篇文章中,我们学习了如何在CUDA中隐藏数据传输,而其中用到的主要技术就是并发计算.这时你可能会问,这个专栏不是CUDA并行计算吗?怎么又说什么并发计算呢?其实,这里所说的"C ...

最新文章

  1. 架构师必然是孤独的领袖
  2. 虚拟机中克隆一台新的centos7
  3. mysql 下一条数据_mysql 查询一条记录的下一条和上一条记录
  4. 我的未来计算机作文,我的未来作文(精选4篇)
  5. 2016 ICPC 北京
  6. 第一个mybatis项目
  7. 软件测试工程师的工作总结
  8. c4d——界面认识、视图快捷键、常用的快捷键
  9. VMware ESXi6.0注入8060阵列卡驱动过程记录
  10. 服务器 字体文件夹,服务器安装字体
  11. 使用gevent的Pool实现异步并发
  12. 孙俪主演的热播剧《安家》房似锦,让我们看到比贫穷更可怕的是原生家庭
  13. ROS学习笔记之小乌龟跟随
  14. c++游戏编程三国杀
  15. SSH登录的两种方式
  16. unity android 震动,unity 调用android的震动
  17. 管理后台布局-左菜单-右侧内容宽度控制(使用ant design vue)
  18. 记录前端常用代码规范
  19. 元宇宙应用层出不穷,沉浸式体验能否被实现?
  20. 深度linux时区,时间和时区

热门文章

  1. css:实现文本两行或多行文本溢出显示省略号
  2. [入门]理想的小白程序员成长曲线
  3. Ajax ToolKit --- ModelPopupExtender应用经验二则
  4. There was an error running 'go version' command: exec: go: executable file not found in %PATH
  5. 【线性回归】面向新手的基础知识
  6. IntelliJ idea 给git下来的项目配置python环境(Anaconda)
  7. python遍历data、并输出结果_获取python运行输出的数据并解析存为dataFrame实例
  8. python中的小魔法(一)
  9. OpenSAP Fiori Elements 公开课第四单元视频的中文字幕
  10. Subject 在 SAP Spartacus Popover Component 中的应用