Enquête sur Sleep() qui dort plus que prévu
La fonction Sleep() de l'API Windows est un outil polyvalent pour suspendre l'exécution des threads. Cependant, certains utilisateurs rencontrent un comportement inattendu où la fonction reste en veille plus longtemps que prévu. Cet article approfondira le problème, en examinant son occurrence courante et ses causes potentielles.
Disparité de comportement et de durée
Lors de l'appel de Sleep(1) en boucle 100 fois, le temps de sommeil total est observé à 1500 ms au lieu de 100 ms. Cette disparité suggère que la durée réelle du sommeil est d'environ 15 ms par itération. Notez que ce comportement varie selon les systèmes, certains utilisateurs signalant des durées de sommeil constantes de 1 ms.
Raisons possibles
La durée de veille excessive n'indique pas nécessairement un dysfonctionnement matériel ou logiciel. . La planification des threads Windows utilise un « quantum de temps », un intervalle de temps auquel l'exécution des threads est liée. Pour les durées de sommeil non nulles, le délai réel est arrondi au quantum complet le plus proche.
Quantum de temps par défaut
Par défaut, Windows 7 a un quantum de temps de 15,6 ms. Cela signifie que Sleep(1) suspendra en fait le thread pendant un minimum de 15,6 ms, ce qui entraînera le comportement observé de 15 ms de sommeil par itération.
Explication alternative
Dans certains cas, les durées de sommeil observées de 1 ms peuvent être attribuées à la présence d'un autre programme ou processus qui a modifié la résolution de la minuterie à l'échelle du système à 1 ms. Ce remplacement peut conduire à des durées de sommeil plus précises.
Conclusion
Le comportement de la fonction Sleep() dans ce scénario est généralement attendu. Le mécanisme quantique de temps du planificateur de threads de Windows arrondit les durées de sommeil pour compléter les intervalles, ce qui entraîne des temps de sommeil plus longs pour de petites durées. Cependant, des facteurs externes tels que les paramètres modifiés de résolution de la minuterie peuvent également influencer le comportement de sommeil.
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!