On n'utilise pas le même vocabulaire, j'ai l'habitude dans mon boulot de toujours parler en terme de performance et je me rend compte que cela impacte sur le choix de mes mots qui s'éloignent un peu du cas purement littéraire.
Alors oui dans le sens du terme le main sera visité par l'ordonnanceur dans sa file d'ordonnancement, mais non il n'y aura aucune action d'effectuée en raison de son état de sommeil (autre qu'un changement de position dans la queue). Donc c'est ce que j'appelle un cas de non ordonnancement car c'est entièrement invisible (c'est de l'ordre de deux à trois instructions CPU).
Pour éclairer mes propos je vais donc définir ce que je cachais sous les termes d'ordonnancement. Un traitement d'ordonnancement notable dans la courbe du temps, à savoir un chargement ou déchargement de contexte.
Et concernant le 2 changements de contexte et pas 1, mea culpa ! On est bien d'accord qu'il y aura chargement de contexte du thread à la création puis rechargement du main à sa destruction.
Sinon je suis aussi abasourdi par ce 78ms pour une création de thread vide... Même si on part du principe que l'OS n'est pas temps réel c'est extrèmement long. La création d'un processus léger comme un thread est de l'ordre de la dizaine de microseconde (donc 10^3 de moins).
Il n'y a pas de méthodes autre que de configurer l'OS et son ordonnanceur pour obtenir que les tâches ne soient pas préemptées. Ou bien de voir si l'OS te propose un ordonnanceur différent de celui qui est utilisé de base.
Mais dans tous les cas tu seras tout de même préempté par les tâches systèmes qui possèdent le plus haut niveau de priorité, et donc à moins de lancer ton programme à un niveau noyau tu ne pourras jamais obtenir un comportement d'interdiction de préemption parfait.
Partager