Wir nutzen Cookies, um das allgemeine Benutzerelebnis zu verbessern. Mit der Nutzung unseres Wikis stimmst du der Nutzung von Cookies zu.

Parallele Programmausführung

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 Scrach-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 gf angeklickt
Wenn ich als Klon entstehe
Wenn Taste [ v] gedrückt
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 gf angeklickt //ein Thread wird hier gestartet
berechnen
gehe zu [Mauszeiger v] //dieser Block wird erst ausgeführt wenn die Berechnung fertig ist

Define 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 Skript in einer Figur oder der Bühne

implementiert werden.

Vorteile von paralleler Programmausführung

Skript ohne Bildschirmaktualisierung laufen lassen

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 gf angeklickt
setze [Punktzahl v] auf [0]

wenn gf 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 CWikipedia.jpg ist dies zum Beispiel der Befehl fork(), welcher ähnlich wie die Klonfunktion von Scratch funktioniert. Einige moderne Programmiersprachen wie zum Beispiel LuaWikipedia.jpg mit coroutines bieten bessere Untersützung. Eine umfassende Liste von Programmiersprachen die parallele Programmausführung unterstützen findet sich auf WikipediaWikipedia.jpg 220px-Flag of the United Kingdom.png.



Code zum Einbinden ins Forum:
[wiki=de:Parallele Programmausführung]Parallele Programmausführung[/wiki]