CodeBlanks Logo Icon CodeBlanks

Dispatcher

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

Main.kt
// withContext ile dispatcher değiştir
// buraya yaz
fun main() = runBlocking {
    
}

Örnek çözüm

Main.kt
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ç

Soru
launch(Dispatchers.____) { fetchUsers() }
Cevap
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.

İleri seviye bölümündeki tüm dersler