Как работают функции sleep
Вообще есть два основных подхода -- busy wait (ожидание в цикле) и scheduler-based (с использованием планировщика). Который из них используется зависит от контекста и возможностей окружения: бывают контектсты, в которых планировщик недоступен (например, обработчик аппаратного прерывания в ядре ОС), бывает кооперативная многозадачность, при которой планировщик не может гарантировать, что процесс возобновит выполнение через заданное время, бывают задержки настолько маленькие, что обращение к планировщику не имеет смысла. В этих случаях используют busy wait. При наличии вытесняющей многозадачности и таймеров высокой точности для достаточно длинных задержек можно использовать планировщик. В ядре linux
используются оба эти подхода.