Selon Priorités de planification chez MSDN :
Les threads sont planifiés pour s'exécuter en fonction de leur priorité de planification. Chaque
le thread se voit attribuer une priorité de planification. La gamme de niveaux de priorité
de zéro (priorité la plus basse) à 31 (priorité la plus élevée). Seulement le
Un fil de page zéro peut avoir une priorité de zéro. (Le fil de page zéro est
un thread système responsable de la remise à zéro des pages libres lorsqu'il y a
pas d'autres threads à exécuter.)
Le système traite tous les threads avec la même priorité comme étant égaux. le
le système attribue des tranches de temps tour à tour à tous les threads
avec la plus haute priorité. Si aucun de ces threads n'est prêt à être exécuté,
le système attribue des tranches de temps tour à tour à tous les threads
avec la priorité la plus haute suivante. Si un thread plus prioritaire devient
disponible pour fonctionner, le système cesse d'exécuter la priorité inférieure
fil (sans lui permettre de finir avec sa tranche de temps), et
assigne une tranche de temps complet au thread de priorité supérieure.
La priorité de chaque thread est déterminée par les critères suivants:
- La classe de priorité de son processus
- Le niveau de priorité du thread dans la classe de priorité de son processus
Je crois que ce planificateur de fil décrit un algorithme appelé file d'attente à plusieurs niveaux , qui est un algorithme de planification beaucoup plus simple que la file d’attente de retour multiniveau. Notez que Windows ' processus planificateur utilise file d'attente de commentaires à plusieurs niveaux , selon Wikipédia . Depuis Windows 7 et Windows Server 2008 R2, il existe également Planification en mode utilisateur ce qui permet aux processus de gérer leur propre planification de threads.
Comme mentionné par d’autres, Linux traite les processus et les threads du point de vue de la planification. La planification de processus / threads sous Linux est configurable. Il existe différents algorithmes de planification, dont certains peuvent être configurés en recompilant le noyau:
Notez que défaut ci-dessus signifie défaut dans le noyau vanille. Certaines distributions sont livrées avec un noyau par défaut préconfiguré pour utiliser un planificateur par défaut différent.
En plus de l'algorithme de planification, il existe également politiques du planificateur : SCHED_FIFO, SCHED_BATCH, SCHED_IDLE, SCHED_OTHER et SCHED_RR; qui peut être modifié au moment de l’exécution et qui décrit le type de charge de travail d’un processus.
Le planificateur par défaut actuel, Planificateur parfaitement équitable, utilise un arbre rouge-noir pour maintenir l’équité de la planification. De À l'intérieur du planificateur complètement équitable de Linux 2.6 :
L’idée principale du CSA est de maintenir l’équilibre (équité) dans
fournir du temps processeur aux tâches. Cela signifie que les processus doivent être
étant donné une bonne quantité du processeur. Quand le temps des tâches est fini
d’équilibre (c’est-à-dire qu’une ou plusieurs tâches ne reçoivent pas une quantité équitable
de temps par rapport aux autres), alors ces tâches déséquilibrées devraient être
donné le temps d'exécuter.
Pour déterminer le solde, le CFS maintient le temps
fourni à une tâche donnée dans ce qu'on appelle le runtime virtuel. le
le temps d'exécution virtuel d'une tâche plus petite, c'est-à-dire le moins de temps possible
la tâche a été autorisée à accéder au processeur - plus ses besoins sont élevés
pour le processeur. Le CFS comprend également le concept de dormeur
équité pour garantir que les tâches qui ne sont pas exécutables actuellement (par exemple,
exemple, en attente d’entrée / sortie) reçoivent une part comparable du processeur
quand ils en ont finalement besoin.
Mais plutôt que de maintenir les tâches dans une file d'attente d'exécution, comme cela a été fait dans
précédents ordonnanceurs Linux, le CFS gère un système chronologique rouge-noir
arbre (voir Figure 1). Un arbre rouge-noir est un arbre avec quelques
propriétés intéressantes et utiles. Tout d'abord, c'est auto-équilibrage, qui
signifie qu'aucun chemin dans l'arbre ne sera jamais plus de deux fois plus long que
tout autre. Deuxièmement, les opérations sur l’arbre ont lieu en temps O (log n)
(où n est le nombre de nœuds dans l’arbre). Cela signifie que vous pouvez
insérer ou supprimer une tâche rapidement et efficacement.
Donc principales différences:
les fenêtres
- Processus de planification en utilisant la file d'attente de commentaires multiniveaux + Planification de threads en utilisant la file d'attente multiniveaux. Le planificateur de threads choisit simplement le thread le plus prioritaire, le planificateur de processus est plus intelligent et utilise la file d'attente de commentaires.
Linux
- Le planificateur de processus et de threads unifié, configurable, utilise par défaut CFS. Le planificateur utilise une métrique d'équité et utilise la priorité pour orienter la distribution de la CPU vers des processus plus prioritaires.