4D v16.3

Über Worker

Home

 
4D v16.3
Über Worker

Über Worker  


 

Ein Worker Prozess ist ein einfacher und leistungsstarker Weg für den Informationsaustausch zwischen Prozessen. Dafür wurde ein asynchrones Nachrichtensystem eingerichtet, über das sich Prozesse und Formulare mit Parametern in ihrem eigenen Kontext aufrufen lassen.

Hinweis: Mit dem Befehl CALL FORM lässt sich eine Projektmethode auch mit Parametern im Kontext eines beliebigen Formulars ausführen.

Über den Befehl CALL WORKER kann jeder Prozess einen sog. "Worker" anheuern, um Projektmethoden mit Parametern in seinem eigenen Kontext auszuführen und so den Zugriff auf gemeinsam genutzte Information erlauben.

Diese Features bieten folgende Vorteile für die 4D Interprozess Kommunikation:

  • Da sie sowohl von kooperativen als auch von preemptive Prozessen unterstützt werden, sind sie die perfekte Lösung für die Interprozess Kommunikation im preemptive Modus (Interprozessvariablen sind in preemptive Prozessen nicht erlaubt).
  • Sie bieten eine einfache Alternative zu Semaphoren, die schwer einzurichten und komplex in der Verwendung sind (siehe Über Semaphoren).

Hinweis: Obwohl CALL WORKER und CALL FORM hauptsächlich für die Interprozess-Kommunikation im Kontext preemptive Prozesse dienen (nur 64-bit Versionen), sind sie auch in 32-bit verfügbar und mit kooperativen Prozessen verwendbar.

Ein Worker dient dazu, einen Prozess zum Ausführen von Projektmethoden aufzufordern. Er besteht aus:

  • Einem einmaligen Namen (*), der auch als Name des zugewiesenen Prozesses verwendet wird
  • Einem zugewiesenen Prozess, der zu einem gegebenen Moment existiert oder nicht existiert
  • Einer Nachrichtenbox
  • Einer Start Methode (optional)

(*) Wichtig: Worker Namen berücksichtigen Klein- und Großschreibung, so kann es z.B. "myWorker" und "MyWorker" geben.

Über den Befehl CALL WORKER fordern Sie den Worker auf, eine Projektmethode auszuführen. Beim ersten Verwenden werden Worker und seine Nachrichtenbox erstellt; der zugewiesene Prozess wird ebenfalls beim ersten Mal automatisch gestartet. Endet der Worker Prozess später wieder, bleibt die Nachrichtenbox geöffnet und eine neue Nachricht in der Box startet einen neuen Worker Prozess.

Folgende Animation zeigt den Ablauf:

Im Gegensatz zur Funktion New process bleibt ein Worker Prozess am Leben, nachdem die Ausführung einer Prozessmethode beendet ist. Das bedeutet, dass alle Methodenausführungen für den gleichen Worker im gleichen Prozess laufen, der alle Informationen zum Prozess-Status behält (Prozessvariablen, aktueller Datensatz und aktuelle Auswahl...). Folglich greifen nacheinander ausgeführte Methoden auf die gleiche Information zu und nutzen sie gemeinsam. Das macht die Kommunikation zwischen Prozessen möglich. Die Nachrichtenbox des Worker verwaltet aufeinanderfolgende Aufrufe asynchron.

CALL WORKER bettet Methodenname und Befehlsargumente in eine Nachricht ein, die in die Nachrichtenbox des Workers gelegt wird. Der Worker Prozess wird dann gestartet, falls er noch nicht existiert und zum Ausführen der Nachricht aufgefordert, d.h. CALL WORKER gibt in der Regel zurück, bevor die Methode ausgeführt wird (die Bearbeitung ist asynchron). Aus diesem Grund gibt CALL WORKER keinen Wert zurück. Soll ein Worker Informationen an den Prozess zurücksenden, der in aufgerufen hat (callback), müssen Sie CALL WORKER erneut verwenden, um dem Aufrufer die nötige Information zu übergeben. Der Anrufer muss in diesem Fall natürlich selbst ein Worker sein.

Über CALL WORKER lässt sich keine Methode in einem Prozess ausführen, der über die Funktion New process erstellt wurde. Nur Worker Prozesse haben eine Nachrichtenbox und lassen sich über CALL WORKER aufrufen. Beachten Sie, dass ein mit New process erstellter Prozess zwar einen Worker aufrufen, aber nicht zurückgerufen werden kann.

Auf 4D Server lassen sich Worker Prozesse über Serverprozeduren erstellen: Sie können z.B. den Befehl Execute on server zum Ausführen einer Methode verwenden, die den Befehl CALL WORKER aufruft.

Ein Worker Prozess wird durch Aufrufen des Befehls KILL WORKER beendet. Er leert die Nachrichtenbox des Workers, fordert den zugewiesenen Prozess auf, die Bearbeitung von Nachrichten zu stoppen und ihre aktuelle Ausführung zu beenden.

CALL WORKER lässt sich nicht verwenden, um eine Methode in einem Prozess auszuführen, der über die Funktion New process erstellt wurde. CALL WORKER kann nur Worker Prozesse aufrufen.

Die Start Methode des Worker dient zum Erstellen des Worker (bei der ersten Verwendung). Wird CALL WORKER mit einem leeren Parameter Methode aufgerufen, wird automatisch wieder die Start Methode verwendet.

Der Hauptprozess, den 4D beim Öffnen einer Datenbank für Benutzer und Anwendungsmodi erstellt, ist ein Worker Prozess, der sich mit CALL WORKER aufrufen lässt. Beachten Sie, dass der Name des Hauptprozesses je nach der verwendeten Sprache des 4D Programms variieren kann, er hat aber immer die Prozessnummer 1; es ist also besser, ihn in CALL WORKER über die Prozessnummer anstatt dem Prozessnamen anzugeben.

Alle Worker Prozesse, mit Ausnahme des Hauptprozesses, haben als Prozesstyp Worker process (5), der über den Befehl PROCESS PROPERTIES zurückgegeben wird.

Im Runtime Explorer und im 4D Server Verwaltungsfenster gibt es neue Icons für Worker Prozesse:

ProzesstypIcon
Preemptive worker process
Cooperative worker process

Hinweis: Andere vorhandene Icons für Prozesse wurden in 4D v15 R5 aktualisiert.

Nachfolgende Darstellung zeigt den Ablauf der Kommunikation zwischen zwei Workern und einem Formular. Die ausgetauschte Information sind einfach Strings:

  1. Worker_1 ruft Worker_2 auf und übergibt "Hello!" als Parameter.
  2. Worker_2 erhält und liest die Nachricht. Er ruft Worker_1 zurück und übergibt "Hello!" als Parameter.
  3. Worker_2 ruft dann das Formular MyForm auf und übergibt "I work" als Parameter. Er startet eine zeitaufwändige Operation, sein Status wird zu 'busy'.
  4. Worker_1 ruft Worker_2 zweimal auf. Da das Nachrichtensystem asynchron läuft, werden die Nachrichten lediglich in Warteschleife gelegt und abgearbeitet, sobald Worker_2 verfügbar ist - nachdem Worker_2 MyForm aufgerufen hat. 



Siehe auch 


CALL WORKER
Current process name
KILL WORKER
Über Semaphoren

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Prozess (Kommunikation)

 
GESCHICHTE 

Erstellt: 4D v15 R5

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)