В однопоточном консольном приложении люди часто используют Thread.Sleep
как ленивый способ приостановить приложение в течение некоторого времени.Выход программы спящего блока? Как это реализовано?
Этот вопрос вызвал интересные моменты о не использует этот подход: Why is Thread.Sleep so harmful
Однако кроме зная, что сон блокирует текущий поток, я не понимаю, как это работает - например, это делает максимум из ядра процессора в жесткая петля или действительно ли она приостанавливает поток?
Что еще важнее для меня, как консольное приложение реагирует на различные сценарии выхода приложений (CTRL-C, kill, кнопка закрытия окна), когда они попадают в середину сна? Будет ли он слепо продолжать выполнение до тех пор, пока сила ОС не убьет его, или он будет вести себя хорошо?
Он просто рассказывает планировщик потоков операционной системы, чтобы не перенести нить на выполнение в течение заданного периода времени. Так что уверен, он «приостановлен». Консольные убийства реализуются ОС и просто завершают процесс. Независимо от того, какие нити в процессе делают, это не актуально, они перестают быть норвежским попугаем. –
Для интересующихся вы можете увидеть [реализацию для 'Thread.Sleep() здесь) (http://referencesource.microsoft.com/#mscorlib/system/threading/thread.cs,5f1072b92dae1dd8). –
Спасибо @HansPassant 'suspended' - это тот термин, который я хотел - поскольку Sheeo явно указывает, что поток приостановлен, а не приводит к вращению. Хорошая ссылка МП. –