Теперь я всегда задавался вопросом: как реализована функция sleep()?
Если речь идет об использовании API из ОС, то как это делается API?
Все ли сводится к использованию специального машинного кода на процессоре? Требуется ли этому процессору специальный сопроцессор или другая штуковина, без которой вы не можете спать()?
Самое известное воплощение sleep() в C (точнее, в библиотеках, которые поставляются с компиляторами C, такими как GNU libc), хотя почти каждый язык сегодня имеет свой эквивалент, но реализация сна в некоторые языки (думаю, Bash) - это не то, что мы рассматриваем в этом вопросе...
EDIT: после чтения некоторых ответов я вижу, что процесс помещается в очередь ожидания. Оттуда я могу предположить две альтернативы:
- таймер устанавливается так, что ядро пробуждает процесс в назначенное время или
- всякий раз, когда ядру разрешен срез времени, он проверяет часы, чтобы проверить, не запустило ли это время процесс.
В ответах упоминается только альтернатива 1. Поэтому я спрашиваю: как ведет себя этот таймер? Если это простое прерывание, чтобы заставить ядро разбудить процесс, как ядро может спросить таймер "разбудить меня за 140 миллисекунд, чтобы я мог запустить процесс в состоянии выполнения"?