Lorsque vous dormez un fil, que se passe-t-il réellement?
Je vois que dormir un thread "met en pause le thread actuel pendant une période de temps donnée" . Mais comment ça marche?
Selon comment Thread.sleep () fonctionne en interne et comment Thread.sleep fonctionne-t-il vraiment? :
- la durée du sommeil sera soumise à une granularité spécifique au système
- le sommeil bloque
- le thread quitte le CPU et arrête son exécution
- le thread ne consomme pas de temps CPU pendant le sommeil
Je ne comprends tout simplement pas la mécanique interne et fondamentale de ce que tout cela signifie.
Je comprends qu'il existe quelque chose appelé le planificateur qui est responsable de la commutation entre les threads.
Les sources semblent indiquer que cela varie selon le système d'exploitation (ou le matériel?) Et la plupart des threads disposent de 1 à 60 ms environ pour effectuer certaines actions avant que le processeur ne passe à un autre thread.
Mais lorsqu'un fil dort (par exemple, plusieurs secondes), comment reprend-il? Je suppose qu'une minuterie est impliquée d'une manière ou d'une autre, est-ce l'horloge de la carte mère? Est-ce lié à la fréquence d'horloge du processeur?
Et même si un minuteur est impliqué, comment le CPU sait-il quand il est temps de prêter attention au thread? Ne devrait-il pas constamment vérifier le fil pour voir s'il est prêt? Est -ce pas efficace vote et donc de genre est beaucoup de temps CPU?
Le sommeil est-il spécifique à la langue du thread ou le système d'exploitation en est-il responsable ou est-ce une chose spécifique au CPU?
Quelqu'un pourrait-il m'expliquer cela avec des explications de base sur des choses comme le planificateur et ce que le CPU fait pendant tout cela?