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.
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.
public class Computation {
@Async
public Int slowSquare(Int value) {
Time::sleep(50);
return value * value;
}
}