Middle
Kotlin, paralel hesaplamalarla çalışmak için hangi mekanizmaları sağlar?
sobes.tech yapay zeka
AI'dan gelen yanıt
- Koruletler (Coroutines): Hafif yapılı akışlar, asenkron kodu imperatif tarzda yazmaya olanak tanır ve engelleyici çağrılardan kaçınır. Yeniden başlatılabilir fonksiyonlara dayanır ve yerel akışlara bağlı değildir.
- Dispatchers: Koruletin çalışacağı akış veya akış havuzunu belirler.
Dispatchers.Default: Kaynak yoğun görevler için (örneğin, CPU-bound).Dispatchers.IO: G/Ç işlemleri için (örneğin, ağ istekleri, dosya işlemleri).Dispatchers.Main: Ana akışta kod çalıştırmak için (örneğin, Android uygulamasında UI güncellemesi).Dispatchers.Unconfined: Korulet, ilk suspend fonksiyonuna kadar mevcut akışta çalışır.
- Suspend fonksiyonlar: Duraklatılabilir ve daha sonra devam ettirilebilir fonksiyonlar.
suspendmodifiyesi ile işaretlenir. - Context: Korulet hakkında bilgi içerir, örneğin dispatcher, job ve istisna işleyici.
- Job: Koruletin yaşam döngüsünü temsil eder (başlatıldı, aktif, tamamlandı, iptal edildi). Korulet yönetimini sağlar (iptal et, tamamlanmasını bekle).
- Scope: Koruletler için kapsam belirler ve yaşam döngülerini yönetir.
- MutableStateFlow / SharedFlow:
kotlinx.coroutines.flowkütüphanesinde, korutinalar arasında güvenli veri alışverişi sağlar. - Mutex: Kritik bölümleri korumak için senkronizasyon primitive'i.
import kotlinx.coroutines.*
fun main() = runBlocking {
// Korulet ve dispatcher kullanımı örneği
val job = launch(Dispatchers.Default) {
repeat(5) { i ->
println("İş korutinası: $i")
delay(100) // Engelleyici olmayan gecikme
}
}
println("Korulet başlatıldı")
job.join() // Koruletin tamamlanmasını bekle
println("Korulet tamamlandı")
}
// Suspend fonksiyon örneği
suspend fun fetchData(): String {
delay(1000) // Ağ isteği simülasyonu
return "Veriler alındı"
}
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
val mutex = Mutex()
var counter = 0
suspend fun incrementCounter() {
mutex.withLock {
counter++
}
}