Жизненный цикл потока в.NET Framework
Состояние потока в.NET Framework объясняется в этой ссылке.
Недавно я увидел эту картинку на веб-сайте, и у меня возникла пара вопросов:
Жизненный цикл потока в ОС не полностью соответствует жизненному циклу потока в.NET Framework. Может ли кто-то предоставить ресурс, который соответствует состояниям в ОС с.NET Framework?
У нас нет состояния с именем Blocked в.NET Framework. Каково будет состояние потока, если он выдаст запрос ввода-вывода?
Какова цель Прерванного государства? Когда поток вызывает
Abort()
метод, он перейдет в состояние AbortRequested и после того, как поток ответит на запрос прерывания, он перейдет в состояние Stopped. Так какова функция прерванного состояния?
2 ответа
Поток блокируется, если его выполнение было приостановлено одним из примитивов синхронизации, таким как блокировка или мьютекс. Любой поток, выполняющий полезную работу в данный момент, по определению не блокируется в этот момент.
AbortRequested/Stopped
Цикл дает потоку возможность выполнить упорядоченное завершение работы, высвободить полученные ресурсы и выполнить другие задачи очистки.
Ответы на ваши вопросы:
- Я не верю, что это отображение будет настолько полезным, насколько вы, кажется, надеетесь. Я никогда не сталкивался с одним и никогда не нуждался в этом.
- Нет реальной необходимости в "заблокированном" состоянии, если только вы не пытаетесь написать что-то вроде детектора тупиковой ситуации (довольно продвинутого). С точки зрения типичного разработчика, состояние "заблокировано" ОС является временным и может быть проигнорировано. (Похоже, ваш код работает, но ОС не имеет ничего общего до получения асинхронного ответа.)
- Представьте прерванное состояние как.NET, обеспечивающее обработчик исключений для всего кода в потоке. Когда обнаруживается исключение, в результате которого поток умирает, .NET переводит его в состояние Прервано для вас. В противном случае вы не сможете определить разницу между ненормальным и нормальным завершением потока.