Je m'interroge sur la "punition" qui se produit lorsqu'un nouveau fil est créé.
D'après ma compréhension de clone (2), NPTL (nouvelle bibliothèque de threads POSIX) et CFS (planificateur parfaitement équitable), lorsqu'un nouveau thread est créé, il est considéré comme un nouveau processus car NPTL utilise un modèle de thread 1: 1.
D'après ce que j'ai lu sur le planificateur, lorsqu'un nouveau processus est ajouté à la file d'attente d'exécution, la fair_clock
variable augmente jusqu'à une fraction de l'horloge murale.
En parcourant les rituels avec pthread_create (3), le clone est appelé comme il le ferait dans un fork (2).
Maintenant, un processus aura un modèle 1: 1 et donc les threads. Ainsi, un fil subit-il également le même sort ? De toute évidence, un thread doit être puni sous une forme quelconque, sinon un processus à plusieurs threads peut accaparer la plus grande partie du temps CPU en remplissant le système RR (round robin) utilisé par CFS.
Si cela est vrai, quels sont les avantages d'utiliser des threads sur des fourches? S'agit-il uniquement de l'espace de partage partagé automatique (par opposition à l'utilisation de shm_open (2))?
la source
Réponses:
D'après le lien que j'ai fourni à propos de l'ordonnanceur complètement équitable, nous voyons que dans le noyau 2.6.24 se trouve ce qu'on appelle l'ordonnancement de groupe.
Pour citer Chandandeep Singh Pabla:
Cela s'applique maintenant à la question ci-dessus, car lorsqu'un processus génère un nouveau thread, il fait partie du groupe de planification de processus. Cela empêche un programme générant 1 000 threads d'accaparer tout le temps processeur, car il ne recevra qu'un 1 / 1001ème (1 000 threads plus le programme d'origine) du temps d'exécution de ce groupe de processus particulier.
Donc, en ralentissant le temps qu'un thread obtient par rapport à l'ensemble du système, cela punit correctement les applications threadées.
la source