线程背景问题

时间:2018-03-29 07:31:02

标签: c# multithreading asynchronous

我喜欢线程,但是我无法在互联网上找到任何信息(也许我只是不知道如何正确地搜索)关于在后台发生的事情,例如线程饥饿在舞台上。 OS如何处理它?我的线程是否在行中等待,以便在线程池中创建它,或者在xy时间无法创建它之后它被杀死了吗?或者它是完全不同的东西?

另一个问题是我为什么要关心线程上下文?通过从我所知道的那里调用ConfigureAwait(false)我不等待那个可以翻译为“我不关心那个上下文”的线程上下文。据我所知,通过调用ConfigureAwait(false)我正在处理死锁。

最后一个问题是,当发生僵局时,背景中发生了什么?主线程是否试图捕获该上下文或其他内容?

1 个答案:

答案 0 :(得分:0)

我认为死锁是在错误的上下文中使用的。死锁描述了两个或多个线程永远被阻塞,彼此等待的情况(例如,通过lock statement)。

线程饥饿:Starvation描述了线程无法获得对共享资源的定期访问而无法取得进展的情况。

  

我的线程是否在行中等待它是否有机会在线程池中创建,或者在xy时间无法创建它后它被杀死了?

我真的不明白这个问题。 您的线程不等待创建。你的函数创建了线程。

  

另一个问题是我为什么要关心线程上下文?

来自MSDN:“上下文是一个有序的属性序列,它定义了驻留在其中的对象的环境。在激活过程中为被配置为需要某些自动服务的对象创建上下文,例如同步,事务,即时激活,安全性等。多个对象可以存在于上下文中。“

这是一个类似的问题:Why would I bother to use Task.ConfigureAwait(continueOnCapturedContext: false);

  

最后一个问题是,当发生死锁时,背景中发生了什么?

两个线程一直在运行(彼此等待),直到你关闭应用程序。