Power Features Advanced 15 min

Concurrency

Concurrency bedeutet: Mehrere Aufgaben laufen scheinbar oder wirklich gleichzeitig.

01 Lesson

Warum Concurrency?

Manchmal wartet dein Programm: auf Netzwerk, Dateien, Datenbanken oder Timer. Währenddessen kann es andere Arbeit machen.

Emerald bietet dafür Fiber, Thread und VirtualThread als unterschiedliche Werkzeuge.

Fiber

Sehr leichtgewichtig. Gut für viele kleine Aufgaben.

Thread

Betriebssystem-Thread. Gut für echte Parallelität.

VirtualThread

Für viele blockierende Aufgaben mit einfacherem Modell.

02 Lesson

Fiber.spawn

Fiber.spawn startet eine Aufgabe. Mit await() wartest du auf das Ergebnis.

fiber.ems
main() {
    Fiber<Int> a = Fiber.spawn { slowDouble(10) };
    Fiber<Int> b = Fiber.spawn { slowDouble(20) };
    Fiber<Int> c = Fiber.spawn { slowDouble(30) };

    Int sum = a.await() + b.await() + c.await();
    println("Result: $(sum)");
}
03 Lesson

@Async

@Async kann eine Methode so transformieren, dass sie als Fiber läuft.

async.ems
public class Computation {
    @Async
    public Int slowSquare(Int value) {
        Time::sleep(50);
        return value * value;
    }
}