Coroutine

Mit dem Sprachkonzept der Coroutine (auch: Koroutine) lassen sich mögliche Parallelitäten in der Bearbeitung einer Aufgabe ausdrücken. Coroutinen sind als Sprachmittel zur Programmierung von Quasi-Nebenläufigkeit sowie als Erweiterung des Prozedur-Konzepts anzusehen. Seinen Ursprung fand das Konzept der Coroutinen bei der Verwendung von Assembler- Sprachen sowie in Programmiersprachen wie SIMULA und Modula-2, die diesbezügliche Sprachelemente explizit zur Verfügung stellen.

In neuerer Zeit stellen Betriebssysteme mit den sogenannten Thread-Mechanismen eine ähnliche Funktionalität zur Realisierung nebenläufiger Programmierung zur Verfügung. Auch u.a. die Programmiersprache Java wurde mit dem Hintergrund der Entwicklung nebenläufiger Software- Systeme mit spezifischen Sprachmitteln konzipiert.

Zur grundsätzlichen Funktionsweise des Prinzips einer Coroutine:

Beim Aufruf einer Prozedur beginnt deren Ausführung immer mit der ersten Anweisung; die Prozedur wird dann vollständig abgearbeitet. Die einzige Abweichung von dieser Regel bilden Anweisungen für Ausnahmesituationen. Coroutinen dagegen können auch nur teilweise abgearbeitet werden. Ein erneuter Aufruf bewirkt, dass mit ihrer Ausführung am Unterbrechungspunkt fortgefahren wird.

Eine Coroutine C kann also ihren Ablauf unterbrechen und den Programmzähler einer anderen Coroutine überlassen. In der Regel wird zu einem späteren Zeitpunkt der Programmzähler wieder C zugeteilt werden. Man sagt dazu auch, dass C zwischenzeitlich die Kontrolle abgibt. Diesen Vorgang nennt man Quasi-Nebenläufigkeit (quasi concurrency). Zu jedem Zeitpunkt kann aber immer nur eine Coroutine die Kontrolle haben, also aktiv sein. Nach der Kontrollabgabe bleiben - anders als bei Rückkehr aus einem Unterprogramm - die Werte aller lokalen Objekte erhalten. Der Zustand der Coroutine wird sozusagen am Unterbrechungspunkt eingefroren. Während zwischen Programm und Unterprogramm die Beziehung Auftraggeber/Beauftragter besteht, ist eine Coroutine zugleich Beauftragter und Auftraggeber. Die Kontrollübergabe geschieht explizit, d.h. die beauftragte Coroutine erhält die Kontrolle direkt von der beauftragenden Coroutine.

Coroutinen finden ihre Anwendung vor allem bei Simulationsaufgaben und in der System- und Echtzeitprogrammierung, d.h. bei der Verarbeitung asynchron auftretender Ereignisse. Sie lassen sich aber auch in anderen Aufgabenbereichen vorteilhaft verwenden, so z.B. als Alternative zur Rekursion.

Informationen zum Artikel
Deutsch: Coroutine
Englisch:
Veröffentlicht: 06.01.2010
Wörter: 333
Tags: Programmiersprachen
Links: Erweiterung, Prozedur, Assembler, Sprache, Programmiersprache
Übersetzung: EN
Sharing: