Files d'attente de tâches en Kotlin pour débutants : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec les files d'attente de tâches en Kotlin : pour débutants

\n

Dans le développement moderne, il est souvent nécessaire d'exécuter de nombreuses tâches de manière asynchrone : traiter des téléchargements, envoyer des requêtes à une API, travailler avec des bases de données. Sans une organisation correcte du code, cela peut mener au chaos — les tâches s'exécutent dans un ordre imprévisible et les ressources système sont surchargées. Les files d'attente de tâches (task queues) résolvent ce problème. Dans cet article, nous allons voir comment créer et utiliser des files d'attente de tâches en Kotlin à l'aide de coroutines et de canaux (Channel). Ce contenu est destiné aux développeurs débutants familiers avec les bases de Kotlin.

\n\n

Qu'est-ce qu'une file d'attente de tâches et pourquoi en a-t-on besoin ?

\n

Une file d'attente de tâches est une structure de données fonctionnant selon le principe FIFO (First In, First Out — « premier entré, premier sorti »). Vous ajoutez une tâche à la fin de la file, et un gestionnaire spécial (worker) la retire du début et l'exécute. Cela permet :

\n
    \n
  • D'ordonner l'exécution. Les tâches n'entrent pas en conflit entre elles.
  • \n
  • De contrôler la charge. Vous pouvez limiter le nombre de tâches exécutées simultanément.
  • \n
  • D'améliorer la réactivité de l'application. Les opérations lourdes ne bloquent pas le thread principal.
  • \n
\n

En Kotlin, les principaux outils pour travailler avec des files d'attente asynchrones sont les coroutines et leur composant Channel. Ce sont des threads légers qui ne consomment pas beaucoup de ressources.

\n\n

Configuration du projet pour travailler avec les coroutines

\n

Avant d'écrire du code, assurez-vous que les dépendances nécessaires sont incluses dans votre projet. Si vous utilisez Gradle, ajoutez dans le fichier build.gradle.kts (ou build.gradle) :

\n
dependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") // pour Android\n}
\n

Vous êtes maintenant prêt à créer votre première file d'attente.

\n\n

Création d'une file d'attente simple avec Channel

\n

Channel est essentiellement une file d'attente prête à l'emploi qui peut transmettre des données entre les coroutines. Prenons un exemple de base : nous avons un producteur (producer) qui génère des tâches, et un consommateur (consumer) qui les exécute.

\n
import kotlinx.coroutines.*\nimport kotlinx.coroutines.channels.Channel\n\nfun main() = runBlocking {\n    val channel = Channel<String>() // Crée un canal pour les chaînes\n\n    // Producteur : envoie les tâches\n    launch {\n        val tasks = listOf("Téléchargement de fichier", "Traitement d'image", "Envoi de rapport")\n        for (task in tasks) {\n            println("Tâche envoyée : $task")\n            channel.send(task) // Ajoute à la file d'attente\n            delay(500) // Simule le temps entre les tâches\n        }\n        channel.close() // Ferme le canal après l'envoi de toutes les tâches\n    }\n\n    // Consommateur : exécute les tâches\n    launch {\n        for (task in channel) { // Lit les tâches de la file d'attente\n            println("Exécution : $task")\n            delay(1000) // Simule le temps d'exécution\n            println("Terminée : $task")\n        }\n    }\n\n    println("Le thread principal continue de fonctionner...")\n    delay(5000) // Attend la fin\n}
\n

Que se passe-t-il ici ?

\n
    \n
  • Channel<String>() crée une file d'attente non bloquante.
  • \n
  • send() ajoute un élément, for (task in channel) les lit dans l'ordre.
  • \n
  • Le canal bloque automatiquement la coroutine consommatrice si la file est vide, et le producteur si la file est pleine (par défaut, la capacité est 0, c'est-à-dire rendez-vous).
  • \n
\n

La sortie du programme sera séquentielle : les tâches sont exécutées strictement l'une après l'autre dans l'ordre d'ajout.

\n\n

Gestion de plusieurs workers et mise en mémoire tampon

\n

Les applications réelles nécessitent souvent un traitement parallèle. Supposons que nous ayons 10 tâches et que nous souhaitions les traiter avec

Blogs

Book Recommendations