lardon3d/docs/architecture/task_system.md

2.9 KiB

Système de tâches (Task System)

Objectif et responsabilités

Le module task gère le cycle de vie complet des tâches de traitement dans Lardon3D. Il définit les états, la progression, la pause coopérative, l'annulation et les callbacks associés à chaque tâche.

Chaque tâche représente une unité de travail atomique : estimation des coûts, exécution sous réservation et publication d'un résultat validé.

Fichiers

  • include/lardon3d/task.h — types publics et API
  • src/task.c — implémentation

Types principaux

typedef enum {
    TASK_STATE_IDLE,
    TASK_STATE_QUEUED,
    TASK_STATE_RUNNING,
    TASK_STATE_PAUSED,
    TASK_STATE_CANCELLED,
    TASK_STATE_DONE,
    TASK_STATE_FAILED
} task_state_t;

typedef struct {
    uint64_t ram_bytes;
    uint64_t gpu_bytes;
    uint32_t cpu_weight;
    uint32_t io_weight;
    uint32_t batch_size;
    uint32_t batch_max;
} task_estimate_t;

API publique

Fonction Description
task_create() Alloue et initialise une tâche avec son estimate
task_destroy() Libère toutes les ressources de la tâche
task_get_state() Retourne l'état courant (thread-safe en lecture)
task_set_state() Met à jour l'état avec transitions validées
task_get_estimate() Retourne l'estimation immuable des coûts
task_advance_progress() Avance la progression d'un pas validé
task_request_pause() Demande une pause coopérative
task_request_cancel() Demande une annulation coopérative
task_should_pause() Vérifie si la tâche doit se mettre en pause
task_should_cancel() Vérifie si la tâche doit s'annuler

Invariants

  1. Estimation immuable : une fois créée, l'estimation d'une tâche ne change jamais. Elle est copiée en lecture seule lors de la réservation.
  2. Transitions d'état validées : seules certaines transitions sont autorisées (IDLE → QUEUED → RUNNING → DONE/FAILED).
  3. Pause et annulation coopératives : le worker vérifie périodiquement task_should_pause() et task_should_cancel(). Le callback ne force jamais l'arrêt.
  4. Progression bornée : la progression ne peut jamais dépasser la valeur maximale définie par l'estimation.
  5. Callback unique : chaque tâche possède un seul callback invoqué une seule fois, quelle que soit l'issue.

Interactions

  • task_queue : la file gère l'ordre d'exécution et invoque les callbacks.
  • resource_governor : l'estimation est utilisée pour la réservation avant exécution.
  • scheduler : le scheduler transmet l'estimation lors de la soumission.

Statut

IMPLÉMENTÉ — cycle de vie complet, pause et annulation coopératives.

Limites

  • Aucune priorité interne : l'ordre est uniquement FIFO.
  • Aucune persistance : les tâches disparaissent à l'arrêt du programme.
  • Aucune dépendance inter-tâches (pas de DAG).
  • La progression est linéaire : pas de séquençage adaptatif interne.