Coroutine overhead
- Kotlin kursu
- Uzman
- Ders 41/47
- 5 dk
Coroutine ve thread maliyetini öğrenirsin.
Coroutine overhead nedir?
Coroutine, Kotlin'de askıya alınabilen (suspendable) hafif görevdir. Thread'e göre çok ucuzdur; binlercesi aynı anda çalışabilir.
Yine de coroutine'in maliyeti sıfır değildir: her biri bir Job ve state nesnesi taşır. Dispatchers.Default CPU işleri, Dispatchers.IO dosya/ağ işleri içindir. Yanlış seçim (ağır CPU'yu IO'ya koymak) verimsiz olur. runBlocking bridge olarak kullanılır. Bu dersteki coroInfo modeli konsepti gösterir.
Dispatcher seçimi
Dispatcher, coroutine'in hangi thread havuzunda çalışacağını belirler. Yanlış seçim performansı düşürür.
Dispatchers.Default CPU bağımlı işler içindir (sayısal hesap). Dispatchers.IO dosya ve ağ G/Ç içindir. Dispatchers.Main UI thread'indedir. CPU işini IO'ya koymak havuzu doyurur; G/Ç'yi Default'a koymak thread'leri bloke eder. Doğru eşleştirme, hem throughput hem gecikme için kritiktir.
Uygulama coroInfo yaz
fun coroInfo(): String tanımla. "coroutine" döndürsün. main içinde println(coroInfo()) yaz.
Başlangıç kodu
// coroInfo fonksiyonunu ekle
fun main() {
// coroutine bilgisini yazdır
}Örnek çözüm
fun coroInfo(): String = "coroutine"
fun main() {
println(coroInfo())
}Beklenen çıktı
coroutine
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 runBlocking gövdesini tamamla
runBlocking { launch { ____ } }
runBlocking { launch { delay(100) } }
Açıklama: delay(100) coroutine'i askıya alır; Thread.sleep değil.
2 Coroutine, thread'e göre neyi azaltır?
A coroutine lowers thread cost.- Disk gecikmesini
- CPU önbellek isabetini
- Thread oluşturma maliyetini Doğru cevap
- Bellek bant genişliğini
Açıklama: Coroutine thread oluşturma maliyetini büyük ölçüde düşürür.
3 Coroutine parçalarını eşle
| Kavram | Anlamı |
|---|---|
coroutine |
Hafif görev |
Dispatchers.Default |
CPU bağımlı iş |
Dispatchers.IO |
G/Ç işleri |
runBlocking |
Bridge |