Sobes.tech
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.