Aus Das deutschsprachige Scratch-Wiki
Unter paralleler Programmausführung (auch Nebenläufigkeit genannt) versteht man das gleichzeitige Ausführen von Berechnungen in einem Computersystem. Scratch bietet verschiedene Möglichkeiten um Blöcke scheinbar gleichzeitig auszuführen. Der aktuelle Scratch Player führt Blöcke allerdings nicht wirklich gleichzeitig aus sondern springt in der Ausführung zwischen verschiedenen sogenannten Threads schnell hin und her, so dass die Ausführung scheinbar parallel erfolgt. Daher bietet Scratch derzeit keine echte Parallelität, es erscheint für die Benutzerin aber so. Durch die einfache Umsetzung, verwenden die meisten Scratch-Projekte parallele Programmausführung. Eine Ausnahme stellen hier die sogenannten 1S1S (1 Sprite 1 Script)-Projekte dar.
Beispiele für parallele Programmausführung in Scratch
Kopfblöcke implementieren Parallelität
Parallele Programmausführung in Scratch ist immer mit einem Kopfblock verbunden. Jeder Kopfblock (mit Ausnahme von Definiere) erzeugt einen eigenen Thread, der die nachfolgenden Befehle abarbeitet. Beispiele dafür sind:
Wenn die grüne flagge angeklickt Wenn ich als Klon entstehe Wenn Taste [ v] gedrückt wird Wenn [Stoppuhr v] > (10) Wenn ich [2 v] empfange
Benutzerdefinierte Funktionen erzeugen keinen weiteren parallelen Thread
Der Definiere () (Block) erzeugt hingegen keinen weiteren Thread. Hier wird die Programmausführung vom aufrufenden Block an das benutzerdefinierte Skript übergeben. Das aufrufende Skript iwrd erst wieder fortgesetzt wenn das aufgerufene Skript beendet wurde.
Wenn die grüne flagge angeklickt //ein Thread wird hier gestartet berechnen::custom gehe zu [Mauszeiger v] //dieser Block wird erst ausgeführt wenn die Berechnung fertig ist Definiere berechnen setze [Variable v] auf ((x-Position)+(1)) wiederhole ((y-Position)*(11)) mal setze [Variable v] auf ((((x-Position)+(y-Position))/(4))-(22) end
Möglichkeiten für parallele Threads in Scratch
Parallele Threads können
- in verschiedenen Figuren
- in Klonen einer Figur
- als mehrere Skripte in einer Figur oder der Bühne
implementiert werden.
Vorteile von paralleler Programmausführung
Die Möglichkeit zur parallelen Programmausführung bietet folgende Vorteile:
- Verschiedene Funktionen können gleichzeitig durchgeführt werden, ohne dass zum Beispiel eine einzelne lange Berechnung das Projekt eine Zeit lang blockiert
- Logisch unabhängige Aufgaben (zum Beispiel das Steuern einer Figur und die Animation des Hintergrunds) können sauber getrennt implementiert werden
- Einzelne wichtige Skripte können optimiert werden, so dass die ohne Bildschirmaktualisierung durchlaufen, so dass das Projekt insgesamt schneller ausgeführt wird. Durch die parallele Programmausführung kann man leichter festlegen welche Skripte bevorzugt ausgeführt werden sollen.
- Die Ausführungszeit von Skripten kann durch Verwendundung von paralleler Hardware verkürzt werden (dies wird allerdings derzeit nicht vom aktuellen Scratch Player unterstützt)
Nachteile von paralleler Programmausführung
- Greifen zwei Threads gleichzeitig auf eine Ressource zu, so ist das Ergebnis nicht vorhersagbar. Bei folgenden beiden Skripten kann die Variable am Ende den Wert 0 oder den Wert 1 enthalten.
wenn die grüne flagge angeklickt setze [Punktzahl v] auf [0] wenn die grüne flagge angeklickt setze [Punktzahl v] auf [1]
- Das Koordinieren von parallel ausgeführten Programmteilen kann schwierig sein, ebenso das Nachvollziehen eines Projekts mit vielen parallel ausgeführten Teilen.
Vergleich zu anderen Programmiersprachen
In Scratch ist die Verwendung von paralleler Programmausführung sehr einfach möglich und wird von den meisten Scratchern intuitiv verwendet, ohne sich lange mit der Thematik zu beschäftigen.
Im Gegensatz dazu sind einfache Programme in anderen Programmiersprachen zumeist nicht parallel und die Parallität muss erst durch spezielle Systembefehle implementiert werden. In der Programmiersprache C ist dies zum Beispiel der Befehl
fork()
, welcher ähnlich wie die Klonfunktion von Scratch funktioniert. Einige moderne Programmiersprachen wie zum Beispiel Lua mit
coroutine
s bieten bessere Untersützung. Eine umfassende Liste von Programmiersprachen die parallele Programmausführung unterstützen findet sich auf Wikipedia
.
[wiki=de:Parallele Programmausführung]Parallele Programmausführung[/wiki]