Quando dormi un thread, cosa sta realmente succedendo?
Vedo che dormire un thread "mette in pausa il thread corrente per un determinato periodo di tempo" . Ma come funziona?
Secondo Come funziona Thread.sleep () internamente e Come funziona davvero Thread.sleep? :
- la durata del sonno sarà soggetta ad una granularità specifica del sistema
- il sonno sta bloccando
- il thread lascia la CPU e interrompe la sua esecuzione
- il thread non consuma tempo della CPU durante la sospensione
Non riesco proprio a capire bene la meccanica interna e fondamentale di cosa significhi tutto questo.
Capisco che esiste qualcosa chiamato scheduler che è responsabile del passaggio tra i thread.
Le fonti sembrano indicare che ciò varia in base al sistema operativo (o all'hardware?) E alla maggior parte dei thread vengono dati 1ms - 60ms circa per eseguire alcune azioni prima che la CPU passi a un altro thread.
Ma quando un thread dorme (ad esempio, molti secondi), come riprende? Immagino che un timer sia coinvolto in qualche modo, è l'orologio della scheda madre? È correlato alla frequenza di clock 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? Non è che effettivamente polling e quindi tipo di sta consumando tempo di CPU?
Dormire è un thread specifico della lingua o è il sistema operativo responsabile o è una cosa specifica della CPU?
Qualcuno potrebbe spiegarmi questo con spiegazioni di base su cose come lo scheduler e cosa sta facendo la CPU durante tutto questo?