Junior — Middle
Comment la gestion des tâches concurrentes est-elle effectuée lors de l'utilisation de coroutines dans un langage de programmation?
sobes.tech IA
Réponse de l'IA
En Kotlin, les coroutines permettent de gérer des tâches concurrentes sans bloquer les threads, en utilisant des threads légers d'exécution. La gestion se fait via :
- CoroutineScope — une portée de visibilité pour les coroutines, qui contrôle leur cycle de vie.
- Dispatcher — détermine sur quel thread ou pool de threads la coroutine sera exécutée (par exemple, Dispatchers.IO pour l'entrée/sortie, Dispatchers.Default pour les tâches intensives en CPU).
- Job — un objet représentant une tâche de coroutine, permettant de l'annuler ou de suivre son état.
Exemple de lancement de plusieurs coroutines concurrentes :
import kotlinx.coroutines.*
fun main() = runBlocking {
val job1 = launch(Dispatchers.Default) {
// Tâche concurrente 1
delay(1000)
println("Tâche 1 terminée")
}
val job2 = launch(Dispatchers.IO) {
// Tâche concurrente 2
delay(500)
println("Tâche 2 terminée")
}
joinAll(job1, job2) // Attendre la fin des deux tâches
}
Ainsi, les coroutines permettent de gérer efficacement la concurrence, en passant d'une tâche à l'autre sans bloquer les threads et en utilisant des dispatchers pour une répartition optimale de la charge.