Kotlin'da korutina nima va u qanday ishlaydi?
sobes.tech AI
AIdan javob
Kotlin'dagi korutina — bu yengil bajarish birligi bo'lib, asinxron va bloklamaydigan kodni yanada o'qilishi oson va ketma-ket yozishga imkon beradi. U threadga o'xshaydi, lekin juda yengil va katta miqdorda yaratish mumkin.
Asosiy komponentlar va ishlash prinsiplari:
- Suspend funksiyalar:
suspendso'z bilan belgilangan funksiyalar, ular bajarilayotgan threadni bloklamasdan to'xtatishi mumkin. To'xtatilgan funksiya, "kutish" operatsiyasini (masalan, tarmoq so'rovi) tugatgach, to'xtatilgan joydan davom etishi mumkin. - Kontekst (Korutina konteksti): Korutinaning xulqini boshqaradigan elementlar to'plami. Ular quyidagilarni o'z ichiga oladi:
Job: Korutinaning hayot aylanishini boshqaradigan tavsifchi.CoroutineDispatcher: Korutina bajariladigan thread(lar)ni belgilaydi. Threadlar orasida o'tishni imkon beradi.CoroutineName: Xatoliklarni aniqlash uchun ixtiyoriy nom.CoroutineExceptionHandler: Boshqarilmagan istisnolar uchun handler.
- Builderlar: Korutinalarni ishga tushiradigan funksiyalar:
launch: Yangi korutina boshlaydi, natija qaytarmaydi.Jobni qaytaradi.async: Natija qaytaradigan (Deferred) yangi korutina boshlaydi. Natijani olish uchun.await()ishlatiladi.runBlocking: Bloklovchi builder, asosan testlar yoki bloklovchi kod bilan integratsiya uchun ishlatiladi.
Qanday ishlaydi:
Korutinalar har bir vazifa uchun alohida thread yaratmaydi. O'rniga, suspend funksiyasi to'xtatilganda, kompilyator hisoblash holatini saqlovchi kodni generatsiya qiladi. Natija mavjud bo'lsa, korutina CoroutineDispatcher tomonidan boshqariladigan threadlardan birida davom ettiriladi. Bu, suspend funksiyalarini asinxron chaqiruvlarga aylantirish bilan amalga oshiriladi, bu esa bitta threadning ko'plab korutinalarni bajarishiga imkon beradi va ular to'xtatilganda o'rtasida o'tishni ta'minlaydi.
Misol:
import kotlinx.coroutines.*
fun main() = runBlocking { // Hozirgi threadni bloklaydi, runBlocking ichidagi korutina tugaguncha
println("Birinchi")
launch { // Orqa fonda yangi korutina ishga tushiradi
delay(1000L) // Bloklamaydigan 1 sekundlik kechikish
println("Kechikishdan keyin")
}
println("Keyin") // Bu satr launch korutinasining tugashidan oldin bajariladi
}
Bu kodning chiqishi:
Birinchi
Keyin
Kechikishdan keyin
Bu, launch va delay'ning bloklamaydigan tabiatini ko'rsatadi.