Коли ви спите ниткою, що насправді відбувається?
Я бачу, що спляча нитка "призупиняє поточну нитку на заданий проміжок часу" . Але тільки як це працює?
Відповідно до того, як Thread.sleep () працює внутрішньо і як насправді працює Thread.sleep? :
- тривалість сну залежатиме від певної системної деталізації
- сон блокує
- потік залишає процесор і зупиняє його виконання
- нитка не витрачає час процесора під час сну
Я просто не можу повністю зрозуміти внутрішню і фундаментальну механіку того, що все це означає.
Я розумію, що існує щось, що називається планувальником, який відповідає за перемикання між потоками.
Джерела, схоже, вказують на те, що це залежить від ОС (або апаратного забезпечення?), А більшості потоків надається 1 мс - 60 мс або близько того, щоб виконати деякі дії, перш ніж ЦП перейде на інший потік.
Але коли нитка спить (наприклад, багато секунд), як вона поновлюється? Я здогадуюсь, що таймер включений якось, це годинник материнської плати? Це пов'язано з тактовою частотою процесора?
І навіть якщо задіяний таймер, як процесор знає, коли настав час знову звернути увагу на нитку? Чи не доведеться постійно перевіряти потоки, щоб побачити, чи готовий він? Хіба це не ефективно опитування, а отже, це забирає час процесора?
Чи є сплячий потік, що залежить від мови, чи ОС відповідає за це чи це особливість процесора?
Хтось, будь ласка, пояснить мені це основними поясненнями таких речей, як планувальник і що ЦП робить під час всього цього?