© Swill Klitch/Shutterstock.com
Teil 2: Asynchrone Kommunikation mit Channels und Co.

Koroutinen in Kotlin: Parallelität


Koroutinen ermöglichen es, nichtblockierende sequenzielle Abläufe einfach umzusetzen. Sobald allerdings mehrere Koroutinen nebenläufig mit denselben Daten arbeiten, gibt es die gleichen Probleme wie bei Threads. Asynchrone Kommunikationsmuster, basierend auf Channels, können auch bei Koroutinen die Erstellung von nebenläufigen Anwendungen vereinfachen.

Video: Kotlin: Innovative Sprachfeatures unter der Lupe

Ein kurzer Überblick: Dies ist der zweite Artikel unserer Serie über Koroutinen. Im ersten Teil [1] wurden die Grundlagen behandelt und ein Beispiel-Service zum Erstellen von Collagen entwickelt. Da wir dieses Beispiel weiterverwenden wollen, ist im nachfolgenden Quellcode die entwickelte Koroutine zu sehen. Der vollständige Code zu diesem und den weiteren Beispielen ist unter [2] zu finden.

Im folgenden Beispielcode wird anhand eines Suchbegriffs sowie einer vorgegebenen Anzahl von Bildern ein neues Bild zusammengestellt. Hierfür wird zunächst eine Liste von Bild-URLs ermittelt. Anschließend werden die einzelnen Bilder sequenziell geladen und zum Schluss zu einer Collage kombiniert.

suspend fun createCollage(query: String, count: Int): BufferedImage { val urls = requestImageUrls(query, count) val images = urls.map { requestImageData(it) } return combineImages(images) }

Im Unterschied zu normalen Funktionen wird diese Koroutine suspendiert, sobald man auf asynchrone Ereignisse wartet. Der Ablauf der Koroutine bleibt dabei sequentiell, d. h., es gibt keine Nebenläufigkeit zwischen den Statements.

Probleme mit geteilten Daten

Nebenläufigkeit muss explizit angestoßen werden – gut in Listing 1 zu erkennen. Dort wird für jeden URL mit der Funktion launch eine neue Koroutine gestartet. Innerhalb der Koroutinen wird jeweils ein Bild geladen und der Liste images hinzugefügt. Wenn der umschließende CoroutineScope mit einen Threadpool arbeitet, werden die Koroutinen tatsächlich nebenläufig ausgeführt. Allerdings ist der parallele Zugriff auf die Ergebnisliste dadurch ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang