作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读关于 SO 的随机问题和答案,并遇到了这个问题:
C#, IAsyncResult and the thread pool
问题是使用线程池或使用普通线程的 X 方法。
使用线程池和普通线程有什么区别?
最佳答案
线程池通常适用于短时间运行的任务。它的局限性在于它是一个应用程序范围的有限资源(每个 CPU 25 个),并且有很多内部类使用线程池,因此如果您执行大量长时间运行的任务,您将耗尽所有线程。
对于长时间运行的任务,最好使用手动创建的线程,并将其背景属性设置为 true。
备注 : 在 .NET Framework 2.0 版中,Thread.CurrentPrincipal
属性值传播到使用 QueueUserWorkItem
排队的工作线程。方法。在早期版本中,不传播主体信息。
何时不使用线程池线程
有几种场景适合创建和管理自己的线程而不是使用线程池线程:
ThreadAbortException
在线程池线程中被抛出,因为 Abort
被称为。 AppDomainUnloadedException
被抛出线程池线程,因为正在卸载应用程序域。 GetAvailableThreads
方法来确定在任何给定时间线程池中的实际线程数。
ThreadPool.GetMaxThreads
是不同的数量。它是请求排队之前池中允许的最大值,而不是当前池中的实际线程数。
关于.net - 使用线程池和普通线程有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1058523/
我是一名优秀的程序员,十分优秀!