Threads / Nebenläufigkeit
Normalerweise läuft ein Programm in einem einzigen Thread, Schritt für Schritt, durch. Doch es ist auch sehr einfach möglich, Prozesse auszulagern und z.B. Berechnungen parallel zum aktuellen Ablauf auszuführen.
Asynchron
Soll neben dem aktuellen Ablauf ein weiterer Prozess gestartet werden, so geschieht dies mit der Objekt-Funktion ".async":
this.async
"Thread started".print
An ".async" lässt sich ein Block anhängen, es kann aber auch in einer Befehlskette verwendet werden:
123.print.async.mul(456789l).print
321.print
In diesem Beispiel wird nach der Ausgabe von "123" ein neuer Thread gestartet, der die Multiplikation berechnet und anschließend ausgibt.
Die Ausgabe dürfte in den meisten Fällen wie folgt aussehen:
123
321
56185047
Synchron
Neben einer asynchronen Verarbeitung ist auch eine synchrone Verarbeitung möglich. In diesem Falle müssen alle anderen Threads ihre Verarbeitung kurz unterbrechen. Dies kann z.B. für den Zugriff von mehreren Prozessen auf verschiedene Variablen nötig sein. Eingeleitet wird ein synchroner Bereich mit der Objekt-Funktion ".sync":
this.sync
"Only one Thread allowed here!".print
So wie ".async" lässt sich ".sync" auch innerhalb einer Befehlskette verwenden.
Schlafen
Manchmal ist es nötig, das Programm oder einen einzelnen Thread für eine gewisse Zeit pausieren zu lassen. Hierzu existiert die private Objekt-Funktion "._sleep". Mit dieser lässt sich der aktuelle Thread für eine gewisse Zeit schlafen schicken:
this._sleep( 200 )
Mögliche Argumente | Beispiel |
Millisekunden |
|
Sekunden, Millisekunden |
|
Minuten, Sekunden, Millisec. |
|
Stunden, Minuten, Sekunden, Millisec. |
|