.NET框架中的线程生命周期
此链接中解释了.NET框架中的线程状态。
我最近在一个网站上看到了这张照片,我想到了几个问题:
-
OS中的线程生命周期与.NET框架中的线程生命周期并不完全一致。 有人可以提供与.NET框架中的操作系统状态相匹配的资源吗?
-
我们在.NET框架中没有名为Blocked的状态。 如果发出I / O请求,线程的状态是什么?
-
Aborted州的目的是什么? 当一个线程调用
Abort()
方法时,它将进入AbortRequested状态,并在线程响应中止请求后,它将进入Stopped状态。 那么Aborted状态的function是什么?
如果某个线程的执行已被其中一个同步原语(如锁或互斥锁)挂起,则该线程将被阻止。 根据定义,在给定时刻执行有用工作的任何线程在那时都不会被阻塞。
AbortRequested/Stopped
循环使线程有机会执行有序关闭,释放获取的资源并执行其他清理任务。
您的问题的答案:
- 我不相信这种映射会像你希望的那样有用。 我从来没有遇到过一个从未需要它。
- 除非您尝试编写类似死锁检测器(相当高级)的东西,否则不需要“阻塞”状态。 从典型的开发人员角度来看,操作系统“阻塞”状态是暂时的,可以忽略。 (看起来您的代码正在运行,但在收到异步响应之前,操作系统无需执行任何操作。)
- 想象一下,Aborted状态为.NET,为线程中的所有代码提供exception处理程序。 当捕获到exception,导致线程死亡时,.NET会将其转换为Aborted状态。 否则,您可能无法区分exception和正常线程终止之间的区别。