Junior — Middle
Cum se gestionează concurența sarcinilor atunci când se utilizează corutine într-un limbaj de programare?
sobes.tech AI
Răspuns de la AI
În Kotlin, corutinele permit gestionarea sarcinilor concurente fără blocarea firelor, folosind fire de execuție ușoare. Gestionarea se face prin:
- CoroutineScope — domeniu de vizibilitate pentru corutine, care controlează ciclul lor de viață.
- Dispatcher — determină pe ce thread sau pool de thread-uri va fi executată corutina (de exemplu, Dispatchers.IO pentru intrare/ieșire, Dispatchers.Default pentru sarcini intensive în CPU).
- Job — obiect care reprezintă o sarcină de corutină, cu ajutorul căruia se poate anula sau urmări starea acesteia.
Exemplu de lansare a mai multor corutine concurente:
import kotlinx.coroutines.*
fun main() = runBlocking {
val job1 = launch(Dispatchers.Default) {
// Sarcină concurentă 1
delay(1000)
println("Sarcina 1 finalizată")
}
val job2 = launch(Dispatchers.IO) {
// Sarcină concurentă 2
delay(500)
println("Sarcina 2 finalizată")
}
joinAll(job1, job2) // Așteptăm finalizarea ambelor sarcini
}
Astfel, corutinele permit gestionarea eficientă a concurenței, alternând între sarcini fără a bloca firele și folosind dispatcher-e pentru o distribuție optimă a încărcăturii.