## Gestion des tâches selon les principes des ordonnanceurs informatiques
La sonde Pathfinder de la NASA a atterri avec succès sur Mars en 1997 et a commencé à transmettre des données. Cependant, quelques jours plus tard, la communication a été perdue en raison d'une défaillance de l'ordonnanceur de tâches. L'ordonnanceur détermine combien de temps CPU allouer à chaque tâche et dans quel ordre les exécuter. Idéalement, il crée l'illusion du parallélisme, mais le bug a conduit à une utilisation totale sans exécuter les opérations prioritaires.
Cet incident illustre comment un ordonnancement sous-optimal réduit l'efficacité. Des problèmes similaires surviennent dans notre travail : être pleinement occupé ne garantit pas d'avancer sur les objectifs clés.
Complexité quadratique dans la priorisation
Prioriser les tâches avant exécution est une erreur courante, semblable à un algorithme en O(n²). Lors du traitement des e-mails entrants, choisir séquentiellement le plus important double la charge de travail lorsque le nombre de tâches double : chaque parcours dure plus longtemps, et il y en a davantage.
En Linux en 2003, classer intégralement les tâches consommait plus de temps en tri qu'en exécution. Solution : remplacer par un nombre fixe de files de priorité (seaux de priorité). Le système a perdu en précision mais gagné en performance globale.
Application aux tâches de développement :
- Au lieu d'un tri parfait, utiliser 3–5 niveaux de priorité.
- Traiter les tâches chronologiquement ou aléatoirement pendant les pics de charge.
- Éviter de reprioriser : fixer l'ordre une fois par heure.
Cela réduit les surcoûts et augmente le temps pour le travail réel.
Réactivité contre profondeur : le compromis
Le changement de contexte dans l'OS implique de sauvegarder l'état de la tâche, de vider les données du cache et de charger les nouvelles. Chaque switch coûte 100–1000 cycles CPU.
Le travail productif nécessite de minimiser les switches, la réactivité en exige de fréquents. Le compromis est inévitable : une haute réactivité réduit le débit.
Stratégies de minimisation :
- Regroupement de tâches : grouper les opérations similaires (réponses aux e-mails, revues de code).
- Blocs de temps : allouer des créneaux de 90 minutes sans distractions.
- Files d'interruptions : vérifier les notifications selon un planning (toutes les 60 minutes).
Fusion d'interruptions
Au lieu de traiter chaque événement immédiatement, l'OS regroupe les interruptions (fusion). Exemple : souris, clavier, opérations E/S sont regroupées ensemble.
En 2013, la fusion d'interruptions a augmenté l'autonomie des ordinateurs portables de 20–30 % : le système revenait plus vite en mode basse consommation.
Pour les développeurs :
- Configurez votre IDE pour regrouper les notifications.
- Utilisez des outils comme RescueTime pour analyser les switches.
- Implémentez un « mode concentration » avec interruptions désactivées.
Cela permet de reprendre le contrôle de l'attention et réduit la charge cognitive.
Ce qui compte
- Surcoût quadratique : la priorisation complète des tâches croît de façon non linéaire — utilisez des seaux.
- Coût du changement de contexte : chaque switch coûte 10–30 secondes de récupération d'attention.
- Fusion : regrouper les interruptions booste l'efficacité de 20–50 %.
- Équilibre : sacrifiez la précision du classement pour le temps d'exécution.
- Pratique : intervalles de vérification fixes au lieu de réactivité.
Les ordonnanceurs informatiques offrent des heuristiques éprouvées : abandonner le perfectionnisme dans l'ordonnancement accélère le progrès.
— Editorial Team
Aucun commentaire pour le moment.