Quel est le rôle de thread.sleep :
(1) Stratégie de concurrence CPU
Dans les systèmes d'exploitation, il existe de nombreuses stratégies de concurrence CPU , Unix Le système utilise un algorithme de tranche de temps, tandis que Windows utilise un algorithme préemptif.
(1).
Dans l'algorithme de tranche de temps, tous les processus sont mis en file d'attente dans une file d'attente. Le système d'exploitation alloue une période de temps à chaque processus dans leur ordre, c'est-à-dire la durée pendant laquelle le processus est autorisé à s'exécuter. Si le processus est toujours en cours d'exécution à la fin de la tranche de temps, le processeur sera retiré et affecté à un autre processus. Si le processus se bloque ou se termine avant la fin de la tranche de temps, le CPU commute immédiatement. Tout ce que le planificateur a à faire est de maintenir une liste de processus prêts, et lorsqu'un processus utilise sa tranche de temps, il est déplacé vers la fin de la file d'attente.
(2).
Un système d'exploitation préemptif signifie que si un processus obtient du temps CPU, il occupera complètement le CPU à moins qu'il n'abandonne l'utilisation du CPU. Par conséquent, on peut voir que dans un système d'exploitation préemptif, le système d'exploitation suppose que tous les processus sont de « bonne moralité » et quitteront activement le CPU. Dans un système d'exploitation préemptif, en supposant qu'il existe plusieurs processus, le système d'exploitation calculera une priorité totale pour eux en fonction de leurs priorités et du temps d'inactivité (depuis combien de temps il n'utilise pas le processeur). Le système d'exploitation attribuera le processeur au processus ayant la priorité globale la plus élevée. Lorsque le processus termine son exécution ou se bloque activement, le système d'exploitation recalculera la priorité totale de tous les processus, puis sélectionnera celui avec la priorité la plus élevée pour lui donner le contrôle du processeur.
(2) D'après ce qui précède, on peut conclure que la fonction de Thread.Sleep() est de dire au système d'exploitation « Je ne participerai pas à la compétition CPU dans les prochaines millisecondes »
Ensuite, il y a deux questions : quelle est la fonction de (1).Thread.Sleep(0) ? La fonction de Thread.Sleep(0) est de "déclencher le système d'exploitation pour redémarrer immédiatement la compétition CPU ". Le résultat de la concurrence peut être que le thread actuel obtient toujours le contrôle du CPU, ou qu'il peut être remplacé par un autre thread pour obtenir le contrôle du CPU. C'est pourquoi nous écrivons souvent Thread.Sleep(0) dans de grandes boucles, car cela donne à d'autres threads tels que le thread Paint le pouvoir d'obtenir le contrôle du CPU, afin que l'interface ne se fige pas à cet endroit.
(2). En supposant que Thread.Sleep(1000) soit appelé maintenant, ce fil sera-t-il définitivement réveillé après 1 seconde ? La réponse est : pas nécessairement. Parce que vous dites simplement au système d'exploitation : je ne veux pas participer à une compétition de processeurs dans les 1 000 prochaines millisecondes. Ensuite, après 1 000 millisecondes, un autre thread peut utiliser le CPU à ce moment-là, de sorte que le système d'exploitation ne réallouera pas le CPU jusqu'à ce que ce thread se bloque ou se termine, même si c'est au tour du système d'exploitation d'allouer le CPU à; cette fois, le thread actuel n'est pas nécessairement celui avec la priorité globale la plus élevée, et le CPU peut toujours être préempté par d'autres threads. Tutoriel recommandé : "Tutoriel Java"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!