Ansicht
Dokumentation

CL_TCL_PROCESS - Klasse zur Abarbeitung von parallelen konkurierenden Tasks

CL_TCL_PROCESS - Klasse zur Abarbeitung von parallelen konkurierenden Tasks

BAL_S_LOG - Application Log: Log header data   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Die Klasse CL_TCL_PROCESS dient der Ermittlung von Abhängigkeiten bei der Verarbeitung von Prozess-Schritten. Es wurde großen Wert auf bestmögliches Laufzeiverhalten gelegt, daher eignet sich diese Klasse auch zur Darstellung von großen Prozessen mit vielen Tasks. Diese Klasse ist also ein Container für abhängige Tasks,die in der richtige Reihenfolge abgearbeitet werden müssen.

Ein Prozess besteht aus beliebig vielen Tasks. Die maximale Anzahl von Taskswird nur durch die Laufzeitumgebung beschränkt. Eine Taskwird durch einen eineindeutigen Schlüssel definiert, der über die Methode ADD_TASK als String an die Klasse CL_TCL_PROCESSübergeben wird. Die Taskswerden über die Methode NEXT_TASK generell in der gleichen Reihenfolge zurückgeliefert, in der sie über ADD_TASK an die Klasse übergeben wurden. Es wird also vorrausgesetzt, dass die Reihenfolge, in der die Taskssequentiell abgearbeitet werden könnten bereits bekannt ist.

Jede Taskkann beliebig vielen Threadszugeordnet werden. Über die Threatswird die Abhängigkeit der Tasksdefiniert. Einen Threadkann man sich wie eine Ressource vorstellen, welche zur Abarbeitung einer Taskbenötigt wird. Verwendet eine andere Taskbereits diese Ressource, so kann die aktuelle Tasknicht ausgeführt werden. Um die Threadsder Taskan die Klasse zu übergeben wird der Methode ADD_TASK ein Array von Strings übergeben. Jeder einzelen String bezeichnet die verwendete Ressource. Damit ist die Methode NEXT_TASK in der Lage zu erkennen, welche Tasksparallel abgearbeitet werden können, ohne einen Resourcen-Konflickt auszulösen. Die parallele Abarbeitung ergibt sich natürlich erst, wenn der Verwender der Klasse alle zurückgelieferten Tasks asychron abarbeitet.

Damit die Klasse erkennen kann, dass eine Taskerfolgreich abgearbeitet wurde, muss über die Methode FINISH_TASK der Status zurückgeliefert werden. Alle folgenden Tasks, die eine oder mehrere Ressourcen einer Taskbenötige müssen warten, bis diese Ressourcen über die Methode FINISH_TASKfreigegeben wurden.

Da es durchaus vorkommen kann, dass für eine Task von vornherein bekannt ist, dass diese nicht ausgeführt werden kann, hat die Methode ADD_TASK noch einen weiteren Parameter, über den die Verarbeitung der Task verhindert werden kann. Alle weiteren Tasks, die die selben Ressourcen verwenden werden dadurch automatisch aufgehalten, bis diese Taskwieder ensperrt wurde.

Es ist auch Möglich, eine Tasknachträglich über die Methode LOCK_TASK zu Sperren oder über DELETE_TASK zu löschen.

Der Speicher für Tasks, die abgearbeitet wurden oder gelöscht wurde wird unmittelbar freigegeben. Neue Taskskönnen jederzeit hinzugefügt werden.

Beziehungen

Die Klasse CL_TCL_PROCESSverwendet intern die Klassen CL_TCL_VERTEX, CL_TCL_EDGEund CL_TCL_VERTEX_ITERATOR.

Beispiel

Ein ausführliches Beispiel finden sie im Programm TCL_PROCESS_EXAMPLE.

Hinweise

Die Implemetierung der Klasse CL_TCL_PROCESSwurde einfach und generisch gehalten. Daher werden zur Darstellung von Tasks und Threads Strings verwendet. Das Laufzeitverhalten der Klasse kann noch weiter verbessert werden, wenn für diese Darstellung spezielle Typen verwendet werden, die den Anforderungen des Verwenders besser entsprechen.

Weiterführende Informationen






ROGBILLS - Synchronize billing plans   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 5930 Date: 20240328 Time: 182801     sap01-206 ( 107 ms )