.NET框架中的线程生命周期

此链接中解释了.NET框架中的线程状态。

我最近在一个网站上看到了这张照片,我想到了几个问题:

在此处输入图像描述

  1. OS中的线程生命周期与.NET框架中的线程生命周期并不完全一致。 有人可以提供与.NET框架中的操作系统状态相匹配的资源吗?

  2. 我们在.NET框架中没有名为Blocked的状态。 如果发出I / O请求,线程的状态是什么?

  3. Aborted州的目的是什么? 当一个线程调用Abort()方法时,它将进入AbortRequested状态,并在线程响应中止请求后,它将进入Stopped状态。 那么Aborted状态的function是什么?

如果某个线程的执行已被其中一个同步原语(如锁或互斥锁)挂起,则该线程将被阻止。 根据定义,在给定时刻执行有用工作的任何线程在那时都不会被阻塞。

AbortRequested/Stopped循环使线程有机会执行有序关闭,释放获取的资源并执行其他清理任务。

http://www.albahari.com/threading/

您的问题的答案:

  1. 我不相信这种映射会像你希望的那样有用。 我从来没有遇到过一个从未需要它。
  2. 除非您尝试编写类似死锁检测器(相当高级)的东西,否则不需要“阻塞”状态。 从典型的开发人员角度来看,操作系统“阻塞”状态是暂时的,可以忽略。 (看起来您的代码正在运行,但在收到异步响应之前,操作系统无需执行任何操作。)
  3. 想象一下,Aborted状态为.NET,为线程中的所有代码提供exception处理程序。 当捕获到exception,导致线程死亡时,.NET会将其转换为Aborted状态。 否则,您可能无法区分exception和正常线程终止之间的区别。