Quando dormi un thread, cosa sta succedendo?
Vedo che dormire un thread "mette in pausa il thread corrente per un determinato periodo di tempo" . Ma come funziona?
Secondo How Thread.sleep () funziona internamente e Come funziona Thread.sleep? :
- la durata del sonno sarà soggetta a granularità specifica del sistema
- sleep è blocco
- il thread lascia la CPU e interrompe l'esecuzione
- il thread non consuma tempo della CPU durante la sospensione
Non riesco proprio a capire la meccanica interna e fondamentale di ciò che questo significa.
Capisco che ci sia qualcosa chiamato scheduler che è responsabile del passaggio da un thread all'altro.
Le fonti sembrano indicare che questo varia a seconda del sistema operativo (o dell'hardware?) e alla maggior parte dei thread viene assegnato 1 ms - 60 ms circa per eseguire alcune azioni prima che la CPU passi a un altro thread.
Ma quando un thread dorme (ad esempio, molti secondi), come si riprende? Immagino che un timer sia coinvolto in qualche modo, è l'orologio della scheda madre? È correlato al clock rate della CPU?
E anche se è coinvolto un timer, come fa la CPU a sapere quando è il momento di prestare nuovamente attenzione al thread? Non dovrebbe controllare costantemente sul thread per vedere se è pronto? In realtà non è eseguire il polling e quindi kinda-of è che consuma il tempo della CPU?
Dormire un thread specifico della lingua o il sistema operativo è responsabile di esso o è una cosa specifica della CPU?
Qualcuno potrebbe spiegarmi spiegazioni di base su cose come lo schedulatore e cosa sta facendo la CPU durante tutto questo?