1. Pengenalan Coroutines
Coroutines adalah fitur Kotlin untuk menulis kode asynchronous (non-blocking) dengan cara yang terlihat seperti kode synchronous (sequential). Coroutine jauh lebih ringan dari thread — Anda bisa menjalankan ribuan coroutine tanpa masalah performa.
Masalah utama dengan callback dan thread tradisional:
- Callback Hell — kode bertingkat yang sulit dibaca
- Thread berat — setiap thread membutuhkan ~1MB stack memory
- Kode sulit dipahami — async logic tersebar di berbagai callback
Coroutine menyelesaikan semua masalah ini dengan memungkinkan Anda menulis kode async seolah-olah kode sync.
Coroutine vs Thread
| Aspek | Coroutine | Thread |
|---|---|---|
| Bobot | 🟢 Sangat ringan (~100 bytes) | 🔴 Berat (~1MB per thread) |
| Jumlah | Bisa ribuan sekaligus | Ratusan saja sudah berat |
| Penulisan | 🟢 Seperti kode sync | 🟡 Callback / Handler |
| Memory | 🟢 Heap (sedikit) | 🔴 Stack (banyak) |
| Cancel | 🟢 Built-in cooperative | 🔴 Manual & kompleks |
| Error | 🟢 try-catch biasa | 🟡 UncaughtExceptionHandler |
2. Suspend Function
Suspend function adalah fungsi yang bisa di-pause (suspend) dan di-resume tanpa memblokir thread. Suspend function hanya bisa dipanggil dari dalam coroutine atau suspend function lainnya.