Diese Funktionalität wurde nicht mehr genutzt und deshalb mit V909 entfernt.

OutOfProc Ausführung

TAA-Bausteine, die gemäß ihrem Implementierungstyp normalerweise im gleichen Adressraum wie die des aufrufenden Bausteins ausgeführt werden, können alternativ in einem getrennten Adressraum ausgeführt werden1). Für folgende Implementierungstypen besteht diese Möglichkeit:

  • dllc32 - C Baustein als Entrypoint in einer DLL
  • dllcob32 - COBOL Baustein als Entrypoint in einer DLL

Standardmäßig werden Bausteine der obigen Implementierungstypen im aktuellen Adressraum ausgeführt. Wenn jedoch ein Eintrag OutOfProc_dllc32 resp. OutOfProc_dllcob32 im Config-Abschnitt der TAA-Registry als Binär mit dem Wert 01 eingetragen wird, werden sämtliche Bausteine des angegebenen Typs in einem vom Aufrufer getrennten Adressraum ausgeführt.

Dazu wird ein Prozess (taaPwp.exe) gestartet, der von einem dedizierten Thread im aufrufenden Prozess überwacht und mit Arbeit versorgt wird. Falls der Prozess unnormal beendet, wird die Ausführung des Bausteins als fehlerhaft markiert, und das Ergebnis dem rufenden Baustein mitgeteilt, der dann bspw. eine Unterbrechung mit Fehlerkontext auslösen kann. Sollte der Bausteinaufruf erfolgreich ausgeführt werden, so wird der Prozess und sein Überwacher nicht beendet, sondern werden vorgehalten für spätere Aufträge. Dabei werden auch bereits geladene DLLs und Ressourcen nicht freigegeben, sondern zugunsten einer schnelleren Ausführung folgender Aufträge weiterhin vorgehalten. Erst wenn der Prozess des aufrufenden Bausteins beendet wird, werden auch der abgetrennte Prozess und sein Überwacher aufgeräumt. Sollte der aufrufende Prozess und der Überwachungsthread aus unvorhergesehenen Gründen vorzeitig beendet werden, so wird dies umgekehrt vom abgetrenntem Prozess erkannt, und wird versucht, insofern noch möglich, die seitens dieses Prozesses angelegten Ressourcen und Informationen aufzuräumen.

Der aufrufende Prozess kann für die Erledigung der in getrennten Adressräumen auszuführende Bausteine mehrere Prozesse und dazugehörige Überwacher aktivieren. Bei Prozessen, die in mehreren Threads mehrere GeVos abarbeiten, oder mit Parallelverarbeitung zu tun haben, kann dies von Vorteil sein. Standardmäßig werden von der Infrastruktur 10 Überwacher instanziert, sobald festgestellt wird, dass ein Baustein in einem getrennten Adressraum ausgeführt werden soll. Die Arbeit wird über diese Überwacher zur Abarbeitung gleichmäßig zugeteilt. Sobald ein Überwacher Arbeit ausführt, wird er feststellen, ob der für die Ausführung benötigte abgetrennte Prozess noch oder wieder gestartet werden muss, und wird entsprechendes veranlassen. Dies bedeutet, dass zwar ab des ersten getrennt auszuführenden Baustein 10 Überwacher angelegt worden sind, allerdings erst im Laufe der Ausführung bis zu 10 abgetrennte Prozesse entstehen. Die Überwacher sind, wie bereits erwähnt, dedizierte Threads im Adressraum des rufenden Bausteins. Die Standardvorgabe von 10 Überwachern und Prozessen kann über die Einstellung OutOfProcInst im Config-Abschnitt der TAA-Registry angepasst werden. Ein Wert gleich Null bedeutet allerdings, dass der aktuelle, interne Vorgabewert benutzt wird (momentan 10). Die Maximalzahl liegt, betriebssystembedingt, bei 64.

Die Aufträge zur Ausführung eines Bausteins in einem getrennten Adressraum werden nicht direkt den einzelnen Überwachern übergeben, sondern werden in eine Warteschlange gestellt, die von den Überwachern nach und nach abgearbeitet wird. Diese Warteschlange fasst standardmäßig 200 Anfragen. Sie kann mit der Einstellung OutOfProcQueue im Config-Abschnitt der TAA-Registry angepasst werden. Die Warteschlange wird automatisch auf die Anzahl der Überwacher hochgesetzt, falls diese größer sein sollte. Die Größe der Warteschlange ist theoretisch nur durch den maximalen Wert einer 32-Bit Zahl und durch die verfügbaren Systemressourcen begrenzt.

Wenn ein abgetrennter Prozess längere Zeit keine Aufgaben zu erledigen hatte, empfiehlt es sich ggf. die vorgehaltenen Ressourcen freizugeben. Standardmäßig wird dies nach einer ununterbrochenen Leerlaufzeit von 60 Sekunden veranlasst. Dieser Wert kann in Millisekunden in der Einstellung OutOfProcTimeout im Config-Abschnitt der TAA-Registry angegeben werden. Ein Wert gleich Null bedeutet eine Freigabe nach der aktuellen Standardvorgabe (momentan 60.000).

ACHTUNG: Da die CTV-Engine nur in dem Adressraum der startenden Steuerung zur Verfügung steht, kann die Konstruktion BuddyCTV nicht für Bausteine benutzt werden, die zwar von der Steuerung gerufen, dafür aber in einem eigenen Adressraum ausgeführt werden.

ACHTUNG: Diese Funktionalität steht nicht unter Windows 95/98/ME zur Verfügung. Der Einsatz dieser Eigenschaft ist für Serverbetrieb (bspw. Wiederaufnahmeserver, Web-Server, Batch/Request Server) gedacht, eine Plattform, bei der Windows NT oder Windows 2000 unterstellt wird.

Siehe auch:

1)
seit V7.00
faq:allg:outofproc · Zuletzt geändert: 30.04.2020 13:49

Copyright © 1992-2020 TeamWiSE Gesellschaft für Softwaretechnik mbH         Adressen |  Kontakt |  AGB |  Datenschutzerklärung |  Impressum