zl程序教程

您现在的位置是:首页 >  后端

当前栏目

ABAP并发计算的一个实例

实例计算并发 一个 ABAP
2023-09-14 09:02:50 时间

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:

clipboard1

测试结果

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

clipboard2

详细测试数据如下:

clipboard3
clipboard4
clipboard5

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