Famine

Définition, exemples et bonnes pratiques

À retenir

  • La tâche n'est pas forcément plantée, elle est juste empêchée d'avancer.
  • Le système global continue de fonctionner, contrairement au blocage complet (deadlock).
  • C'est souvent le résultat d'une gestion des priorités trop rigide ou mal conçue.

La famine désigne une situation où un programme ou une tâche (un fil d'exécution) reste bloqué indéfiniment parce qu'il n'arrive jamais à obtenir la ressource dont il a besoin (comme le processeur ou l'accès à un fichier). C'est comme faire la queue dans un restaurant où les clients prioritaires passeraient systématiquement devant vous : vous êtes là, vous attendez, mais vous ne mangez jamais.

Étymologie

Vient du latin fames signifiant la faim. En informatique, le terme est la traduction directe de l'anglais starvation. Il illustre l'idée qu'un processus est « affamé » de ressources vitales pour son exécution.

Exemples d'usage

  • Une tâche de fond peu importante qui n'obtient jamais de temps de calcul car le système donne toujours la priorité aux actions de l'utilisateur.
  • Un script qui attend d'écrire dans une base de données alors que d'autres scripts prioritaires occupent la file d'attente en continu.

Cas d'usage

Ce concept intervient principalement dans la gestion des systèmes d'exploitation (ordonnancement des tâches) et dans la programmation concurrente (gestion des accès partagés entre plusieurs threads). On le rencontre dès qu'il y a une gestion de priorités mal équilibrée.

Bonnes pratiques

Pour éviter la famine, il est recommandé d'utiliser des algorithmes d'ordonnancement dits « équitables » (fairness). Une technique classique consiste à utiliser le vieillissement (aging) : plus une tâche attend, plus sa priorité augmente automatiquement pour forcer son passage.

Synonymes

starvation (anglicisme) privation de ressources disette

Antonymes

équité allocation équitable fairness

Conseil

Quand vous développez des applications avec plusieurs fils d'exécution (multi-threading), évitez de créer trop de niveaux de priorité. Privilégiez les files d'attente de type « premier arrivé, premier servi » (FIFO) pour garantir que chaque tâche aura son tour.

Questions fréquentes

Quelle est la différence entre famine et interblocage (deadlock) ?

Dans un interblocage, tout le monde est bloqué car chacun attend l'autre. Dans une famine, le système tourne normalement pour les autres, mais une tâche précise est laissée de côté indéfiniment.

Est-ce qu'une tâche en famine finit par s'arrêter ?

Non, elle reste généralement en attente active ou passive jusqu'à ce que les ressources se libèrent ou que le programme soit forcé à s'arrêter par l'utilisateur.