Gemeinsame Nutzung von Informationen in einer Multithreading-Umgebung

Automatisch übersetzt von Deepl

4D v16 R6 führt ein neues Konzept für die Kommunikation zwischen Prozessen ein: Shared Object und Shared Collection Variablen! Sie sind eine Lösung , um die Verwendung von Interprozess-Variablen (die im Multi-Thread-Modus nicht verwendet werden können) zu vermeiden. Dank dieser Lösung können Sie Informationen zwischen präemptiven Prozessen leicht austauschen.

Beispiel einer Datenbank

Neues Konzept: gemeinsame Objekte/Sammlungen

In der Welt der Computerprogrammierung gilt: Je weniger Daten Sie gemeinsam nutzen, desto effizienter sind Sie. Aber natürlich müssen in den meisten Fällen die Prozesse, die Sie erstellt haben, miteinander kommunizieren. Entweder um Parameter zu senden, um Ergebnisse zu erhalten oder einfach um auf gemeinsame Informationen zuzugreifen. Das ist der Grund, warum Shared Objects und Shared Collections geschaffen wurden! (Denken Sie daran, dass normale Objekte und Sammlungen nicht zwischen Prozessen geteilt werden können. Wenn sie als Parameter übergeben werden, wird eine Kopie der Objekte erstellt).

Shared Object s und Shared Collections verhalten sich genauso wie normale Objekte, außer dass sie bei ihrer Instanziierung mit den folgenden neuen Befehlen als „shared“ deklariert werden müssen: Neues gemeinsames Objekt und Neue gemeinsame Sammlung. Sobald sie instanziiert sind, können sie direkt, wie alle anderen, zum Lesen verwendet werden. Es wird kein Semaphor oder sonstiges benötigt, sondern die Shared Objects werden einfach verwendet.

Zum Schreiben oder Ändern müssen die Shared Objects von den Schlüsselwörtern Use und End use umgeben sein. Diese Schlüsselwörter setzen interne Semaphoren und müssen verwendet werden, um im Schreibmodus auf den Inhalt von Objekten und Sammlungen zuzugreifen. Die Verwendung dieser Schlüsselwörter ist wirklich einfach, viel einfacher als die Semaphoren der 4D-Sprache. Wie das? Man darf nicht vergessen, sie freizugeben. Use und End use umschließen die Variablen immer, so dass Sie nicht vergessen können, die Sperre aufzuheben.

$object:=New shared object
$ps:=New process("my process";0; "myprocess";$object) // als Referenz gesendet
Use ($object)
$object .myAttribute:=10
End use

Wie kann man sie in anderen Prozessen verwenden?

Sie werden sich vielleicht fragen: Wie kann ich ein gemeinsam genutztes Objekt von einem anderen Prozess verwenden (auf andere Weise als durch Senden eines Parameters)? Wie kann ich ohne Interprozess-Variablen gemeinsam nutzen?

Ein „super-shared“ Objekt löst dieses Problem. Ein neuer Befehl, Storage, ermöglicht den Zugriff auf dieses Objekt für alle laufenden Prozesse.

Dieses Objekt ist auf jeder Maschine einzigartig. Eines (im Einzelbenutzermodus), ansonsten eines pro Client und eines auf dem Server. Der Befehl Storage gibt das freigegebene Objekt zurück, so dass es wie jedes andere freigegebene Objekt manipuliert werden kann, aber es kann nur freigegebene Objekte oder freigegebene Sammlungen enthalten. (Beachten Sie, dass Komponenten auch selbst Storage enthalten können)

Use (Storage)
Storage .myCollection:=New shared collection
End use

Vorteile

Shared Objects und Shared Collections haben im Vergleich zu Standard-Interprozessvariablen viele Vorteile, wie z.B:

  • kein Schutz beim Lesen erforderlich: schneller Zugriff
  • Use- und End Use-Schlüsselwörter vermeiden Codierungsfehler, die zu Deadlock-Szenarien führen
  • Da Objekte oder Sammlungen in der Regel hierarchisch aufgebaut sind (sie enthalten andere Objekte oder Sammlungen), wird durch das Sperren eines Objekts die gesamte Kette auf einmal gesperrt, was die Leistung verbessert.

Sie werden sich schnell an gemeinsam genutzte Objekte und Sammlungen gewöhnen und es wird zu einer natürlichen Art der Programmierung werden 🙂

Roland Lannuzel
- Product Owner & 4D Experte - Nach seinem Studium der Elektronik arbeitete Roland als Entwickler und Berater in der industriellen IT-Branche, wo er Lösungen für Kunden mit einer Vielzahl von Datenbanken und Technologien entwickelte. In den späten 80er Jahren verliebte er sich in 4D und setzte es bei der Entwicklung von Geschäftsanwendungen wie Buchhaltungs-, Abrechnungs- und E-Mail-Systemen ein. 1997 trat er schließlich in das Unternehmen ein und leistete einen wertvollen Beitrag, indem er Spezifikationen, Testtools und Demos entwarf, Schulungen durchführte und auf vielen Konferenzen für die 4D Community sprach. Er gestaltet die Zukunft von 4D aktiv mit, indem er neue Funktionen und Datenbankentwicklungstools definiert.