Un thread ne fait qu'entrelacer des opérations de sorte que certaines parties du processus semblent se chevaucher dans le temps. Une machine monocœur à plusieurs threads se contente de sauter: elle exécute de petits morceaux de code à partir d'un thread, puis passe à un autre thread. Un ordonnanceur simple décide quel thread a la priorité la plus élevée et est réellement exécuté dans le noyau.
Sur un ordinateur monocœur, rien ne se passe réellement "en même temps". C'est juste une exécution entrelacée.
Il existe de très nombreuses façons de réaliser l'entrelacement. Beaucoup.
Supposons que vous ayez un processus simple à deux threads qui utilise un verrou simple afin que les deux threads puissent écrire dans une variable commune. Vous avez six blocs de code.
- Serrure T1 avant
- T1-avec serrure
- Serrure T1 après
- Serrure T2-avant
- T2-avec serrure
- Serrure T2 après
[Cela peut être dans une boucle ou avoir plus de verrous ou autre. Tout cela ne fait que s'allonger, pas être plus complexe.]
Les étapes de T1 doivent s'exécuter dans l'ordre (T1-avant, T1-avec, T1-après) et les étapes de T2 doivent s'exécuter dans l'ordre (T2-avant, T2-avec, T2-après).
Outre la contrainte "dans l'ordre", celles-ci peuvent être entrelacées de n'importe quelle manière. En tous cas. Ils peuvent être exécutés comme indiqué ci-dessus. Un autre ordre valide est (T1-avant, T2-avant, T2-verrou, T1-verrou, T2-après, T1-après). Il y a beaucoup de commandes valides.
Attendez.
Ce n'est qu'une machine à états avec six états.
Il s'agit d'un automate à états finis non déterministe. L'ordre des états T1-xxx avec les états T2-xxx est indéterminé et n'a pas d'importance. Il y a donc des endroits où le "prochain état" est un tirage au sort.
Par exemple, lorsque le FSM démarre, T1-avant ou T2-avant sont tous deux des premiers états légitimes. Un tirage au sort.
Disons que c'est venu T1-avant. Faites ça. Lorsque cela est fait, vous avez le choix entre T1 avec et T2 avant. Un tirage au sort.
À chaque étape du FSM, il y aura deux choix (deux fils - deux choix) et un tirage au sort peut déterminer quel état spécifique est suivi.