Dispatcher
- Kotlin kursu
- İleri seviye
- Ders 2/83
- 5 dk
Dispatchers.IO, Default, Main ile bağlam öğrenirsin.
Dispatchers nedir?
Dispatchers, coroutine'lerin hangi thread havuzunda çalışacağını belirler. Dispatchers.IO ağ ve disk işleri için, Dispatchers.Default CPU yoğun işler için, Dispatchers.Main ise UI thread için kullanılır.
Bir coroutine başlatırken launch(Dispatchers.IO) { ... } biçiminde dispatcher verirsin. withContext ile çalışan bir coroutine'in dispatcher'ını geçici olarak değiştirebilirsin. Doğru dispatcher seçmek performans açısından anlamlıdır.
IO, Default, Main farkı
Dispatchers.IO 64 thread'e kadar büyüyebilen bir havuzdur; ağ ve dosya gibi beklemeli işler için idealdir. Dispatchers.Default CPU çekirdek sayısı kadar thread sunar; hesaplama işleri için uygundur.
Dispatchers.Main platforma özeldir; Android'de UI thread'idir. UI güncellemeleri burada yapılır. withContext(Dispatchers.Default) { ... } ile CPU işini geçici olarak Default'a taşıyıp sonra Main'e dönebilirsin. Yanlış dispatcher UI donmasına yol açar.
Uygulama withContext ile dispatcher değiştir
runBlocking içinde withContext(Dispatchers.Default) ile bir blok aç. İçinde println("Hesaplandı") yazdır. Blok bitince println("Bitti") yazdır.
Başlangıç kodu
// withContext ile dispatcher değiştir
// buraya yaz
fun main() = runBlocking {
}Örnek çözüm
fun main() = runBlocking {
withContext(Dispatchers.Default) {
println("Hesaplandı")
}
println("Bitti")
}Beklenen çıktı
Hesaplandı Bitti
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Ağ isteği için dispatcher seç
launch(Dispatchers.____) { fetchUsers() }
launch(Dispatchers.IO) { fetchUsers() }
Açıklama: Ağ ve disk işleri için Dispatchers.IO kullanılır.
2 Dispatcher kullanım alanlarını eşle
| Kavram | Anlamı |
|---|---|
Dispatchers.IO |
Ağ ve disk |
Dispatchers.Default |
CPU yoğun iş |
Dispatchers.Main |
UI thread |
withContext |
Geçici geçiş |
3 CPU yoğun bir hesaplama hangi dispatcher'da çalışmalı?
- Dispatchers.Main
- Dispatchers.Default Doğru cevap
- Dispatchers.IO
- Dispatchers.Unconfined
Açıklama: CPU işleri Dispatchers.Default üzerinde çalışır.