什么是后台线程、前台线程和主线程?

Posted

技术标签:

【中文标题】什么是后台线程、前台线程和主线程?【英文标题】:What are background, foreground & main threads? 【发布时间】:2011-01-15 10:47:08 【问题描述】:

后台线程、前台线程和主线程有什么区别? .NET 中有哪些不同类型的线程?

【问题讨论】:

【参考方案1】:

后台线程(其 Thread 对象的 Background 属性设置为 true)将 不阻止应用程序退出。

一旦所有正常(前台)线程都退出,所有正在运行的后台线程都会立即终止。 此外,如果卸载 AppDomain,则 AppDomain 中的所有后台线程都会立即中止。

ThreadPool 管理的线程是后台线程。

前台线程是普通线程。

主线程是启动程序的初始线程。 (运行Main方法的线程)

如需了解更多信息,请参阅here。

【讨论】:

是的,有;阅读链接。默认限制为每个 CPU 250;你可以通过调用ThreadPool.SetMaxThreads来改变它。 我可能弄错了,但我认为限制是每个核心。另一点,您的应用程序中需要这么多线程的可能性很小。你要做的就是增加线程开销。从经验来看,2/3 个内核线程似乎是一个不错的选择。【参考方案2】:

文档中简明扼要地说明了区别。程序结束时,后台线程被中断。

http://msdn.microsoft.com/en-us/library/h339syd0(VS.71).aspx

【讨论】:

【参考方案3】:

后台线程就是这样,它是从应用程序的 UI 线程在后台运行的线程。类似 winforms 应用程序中的 UI 线程是负责重新绘制 UI 和其他用户交互的线程。

将长时间运行的进程移至后台线程将有助于提高可用性。这是一个很好的intro document 为你线程。

【讨论】:

以上是关于什么是后台线程、前台线程和主线程?的主要内容,如果未能解决你的问题,请参考以下文章

前台线程与后台线程之分

java-守护线程

在后台和主线程 ios 中执行

饭店的运作模式(线程线程池任务)

在后台和主线程中使用托管对象上下文

java前台线程和后台线程