Quando você dorme um fio, o que realmente está acontecendo?
Vejo que dormir um encadeamento "pausa o encadeamento atual por um determinado período de tempo" . Mas como isso funciona?
De acordo com Como Thread.sleep () funciona internamente e como o Thread.sleep realmente funciona? :
- a duração do sono estará sujeita a alguma granularidade específica do sistema
- o sono está bloqueando
- o thread sai da CPU e interrompe sua execução
- o encadeamento não está consumindo tempo de CPU enquanto dorme
Simplesmente não consigo entender bem a mecânica interna e fundamental do que tudo isso significa.
Entendo que existe algo chamado agendador responsável pela alternância entre threads.
As fontes parecem indicar que isso varia de acordo com o sistema operacional (ou hardware?) E a maioria dos threads recebe de 1 a 60 ms para executar algumas ações antes que a CPU mude para outro thread.
Mas quando um thread dorme (por exemplo, muitos segundos), como ele é retomado? Acho que um temporizador está envolvido de alguma forma, é o relógio da placa-mãe? Está relacionado à taxa de clock da CPU?
E mesmo que um temporizador esteja envolvido, como a CPU sabe quando é hora de prestar atenção ao encadeamento novamente? Não seria necessário verificar constantemente o tópico para ver se está pronto? Isso não está efetivamente pesquisando e, portanto, está consumindo tempo de CPU?
O modo de suspensão é específico do idioma do encadeamento ou o SO é responsável por isso ou é específico da CPU?
Alguém poderia me explicar isso com explicações básicas de coisas como o agendador e o que a CPU está fazendo durante tudo isso?