ABAP-SPTA 并行处理(多线程)

文摘   2024-11-08 21:53   上海  

abap 多线程运行demo


补充一段多线程的源码~


SAP ABAP程序优化-多线程并行处理介绍


使用类 CL_ABAP_PARALLEL 进行大规模并行对话工作流程


3215918 - 并行 RFC 组 \"default\" 替换组 \"parallel_generators\"


新的系统可以用上面类的办法,或者cds等办法。我这在介绍一遍SPTA上面也有自己的异步RFC办法原理相同


SAP ABAP 中使用 SPTA 框架的并行处理技术


随着 HANA 和内存处理技术的出现,探讨这个话题可能看起来时机不太对。但是,有许多企业在未来几年内仍没有迁移到 HANA 的计划。正如人们所说,工作还得继续,这促使我们在这里为那些仍需在批处理作业中处理数百万行数据,且感觉 “在 SAP 中执行那些批处理作业时夜晚变得太短(时间不够用)” 的 ABAP 开发人员发布这篇拖延已久的文章(灵感来自一位朋友的博客)。


为何需要并行处理?


并行处理主要是为了提高任何 ABAP 程序的性能。使用并行处理框架,我们可以显著缩短任何程序的处理时间,特别是在数据量非常大的情况下。并行处理框架背后的基本概念是将大量数据划分成若干个小的工作包,并在不同的任务中处理不同的工作包。这样每个工作进程将同时并行处理,从而显著缩短时间。如今,每个与分发相关的项目都有大量数据,因此调用并行处理框架对于缩短时间非常有用。


传统并行处理


我们可以通过调用NEW TASK中任何支持RFC的功能模块来使用并行处理框架。这样,在确定了工作包的数量后,我们就可以为每个工作包创建不同的任务并并行处理它们。

另请阅读:SAP 中的 bgRFC

为什么需要 SPTA 框架?

SPTA 框架是 SAP 提供的最复杂、最安全的并行处理框架。如果我们想要处理多个记录并想要并行更新/检查多个数据库表,在这种情况下,使用传统方式调用并行处理很困难,并且可能存在一些ABAP内存问题。但在 SPTA 框架中,针对所有 ABAP 内存相关问题都内置了安全性,因此非常安全。另外,SPTA框架非常容易实现,所有并行处理工作都由SAP处理,我们不需要费心如何处理它。这样看来,它也是一个非常成熟的框架。

SPTA并行处理框架

要调用 SPTA 框架,我们需要调用功能模块 SPTA_PARA_PROCESS_START_2。这是SAP提供的标准功能模块。在这个功能模块中,我们必须使用三个子程序来构建我们自己的处理逻辑。

  "BEFORE_RFC_CALLBACK_FORM:该例程由功能模块在调用RFC功能模块之前调用。这里我们必须构建我们想要在RFC功能模块中处理的不同工作包。  "IN_RFC_CALLBACK_FORM:该例程在工作包创建后由功能模块调用。在此例程中,我们可以使用自己的启用 RFC 的功能模块或自定义代码来处理每个工作包。  "AFTER_RFC_CALLBACK_FORM:该例程由功能模块在最后调用。处理完所有工作包后,我们必须收集所有处理后的数据。
CALL FUNCTION 'SPTA_PARA_PROCESS_START_2' EXPORTING SERVER_GROUP = P_GROUP " SERVER_GROUP created from RZ12 MAX_NO_OF_TASKS = P_TASK "最大进程数 BEFORE_RFC_CALLBACK_FORM = 'BEFORE_RFC' IN_RFC_CALLBACK_FORM = 'IN_RFC' AFTER_RFC_CALLBACK_FORM = 'AFTER_RFC' CALLBACK_PROG = SY-REPID CHANGING USER_PARAM = GT_DATE_LIST "这是为了让你传输你想要处理的数据 EXCEPTIONS INVALID_SERVER_GROUP = 1 NO_RESOURCES_AVAILABLE = 2 OTHERS = 3.


BEFORE_RFC_CALLBACK_FORM:该例程由功能模块在调用RFC功能模块之前调用。这里我们必须构建我们想要在RFC功能模块中处理的不同工作包。

IN_RFC_CALLBACK_FORM:该例程在工作包创建后由功能模块调用。在此例程中,我们可以使用自己的启用 RFC 的功能模块或自定义代码来处理每个工作包。

AFTER_RFC_CALLBACK_FORM:该例程由功能模块在最后调用。处理完所有工作包后,我们必须收集所有处理后的数据。


我们在调用功能模块时也提到了服务器组。服务器组可以在RZ12事务中维护。但这是基础活动。

在更改参数时,我们必须传递包含所有数据的总内部表。从这个内部表中,我们将创建不同的小工作包(即内部表)以进行并行处理。

在回调程序名称中,我们必须传递调用程序名称。

希望您不要将并行处理与并行光标技术混淆。 请阅读循环中并行游标技术的图形和统计分析。

现在我们将讨论主要的三个子程序以及如何详细调用它们。

BEFORE_RFC_CALLBACK_FORM:在此例程中,我们必须创建小型内部表,我们将其称为工作包,以便在 IN RFC 例程中进行并行处理。

曰天曰地
我要到哪里去↔️ 灵台方寸山,斜月三星洞。假如有一天全人类不存在,怎么证明人类存在过。AI怎么考古?会怎么考古⚠️
 最新文章