Kotlin Coroutine'ler: Thread vs Async Seçimi Rehberi

Kotlin'de eşzamanlı işlemler yaparken sık sık kafanız karışır: thread açmalı mı, launch mı, async mı kullanmalı? Doğru seçim performansı ve kodun okunabilirliğini doğrudan etkiler.

Geleneksel Java thread'leri sistem kaynağı açısından ağırdır. Her thread bellek ayırır, bağlam değiştirme maliyeti yüksektir. Coroutine'ler bunun tersine hafif ve binlercesini aynı anda çalıştırabilirsiniz.

Thread kullanın: Sistem seviyesi işlemler, native kod çağrıları veya thread-local storage gerektiğinde.

launch kullanın: Sonucu umursamadığınız arka plan işleri için (loglama, analytics).

async kullanın: Sonucu beklemek istediğiniz, birden fazla eşzamanlı işi koordine etmek gerektiğinde.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

İki API'den paralel veri çekip birleştirme senaryosu:

1import kotlinx.coroutines.*
2
3suspend fun fetchUser(id: Int): String {
4delay(1000) // API çağrısını simüle et
5return "User $id"
6}
7
8suspend fun fetchPosts(userId: Int): String {
9delay(800) // API çağrısını simüle et
10return "Posts for User $userId"
11}
12
13suspend fun main() {
14val startTime = System.currentTimeMillis()
15
16// async ile paralel çalıştır
17val userDeferred = async { fetchUser(1) }
18val postsDeferred = async { fetchPosts(1) }
19
20// Her ikisinin sonucunu bekle
21val user = userDeferred.await()
22val posts = postsDeferred.await()
23
24println("$user")
25println("$posts")
26println("Toplam süre: ${System.currentTimeMillis() - startTime}ms")
27}

Beklenen çıktı:

1User 1
2Posts for User 1
3Toplam süre: 1000ms (1800ms değil!)

Async sayesinde iki işlem paralel çalışır, toplam süre en uzun işin süresidir.

1scope.launch {
2// Ateş ve unut - sonuç almıyoruz
3delay(1000)
4println("Arkaplanda tamamlandı")
5}
6
7val deferred = scope.async {
8// Sonuç döndür
9delay(1000)
10return@async "Veri hazır"
11}
12val result = deferred.await() // Sonucu al

Launch bir Job döndürür, async bir Deferred döndürür. Deferred'den await() ile sonuç alırsınız.

Coroutine'ler thread'lerin yerini almaz, onları daha verimli hale getirir. Basit arka plan işler için launch, sonuç beklemeniz gerekiyorsa async seçin. Thread'leri yalnızca sistem seviyesi ihtiyaçlar için tutun.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz