13
A
回答
5
线是一个重量级的物体。
创建新线程需要大量资源,例如为托管堆栈分配1 MB,创建托管线程对象,内核堆栈,内核线程对象,用户线程环境块。这都需要时间和记忆。因此,您不想快速创建和销毁对象。此外,一旦有多个线程切换,还需要一些资源
线程池是CLR可以放置未使用线程的地方,以防您的应用程序需要它。
线程池最初包含0个线程,一旦您从池中请求一个线程,该池将快速创建为该池定义的最小线程数。大约2分钟后,未使用的线程被杀死。但是,如果负载增加并且需要更多线程,则线程池将缓慢创建新线程,直到达到最大限制。您不能拥有比最大值更多的线程,一旦工作线程返回到池中,所有新请求都将排队并执行。在最坏情况下,你可以得到OutOfMemoryException异常
如果从池中取出一个线程被阻塞,它:
- 占有的资源
- 没有做任何有价值的工作,当一个应用程序可能需要该线程的新请求
- 休息的可扩展性通过引入块
13
线程池中只有有限的线程数量;线程池被设计为高效地执行大量的任务。他们依靠每个任务快速完成,以便线程可以返回到池并用于下一个任务。
因此,在一个线程池线程中休眠会使池停止运行,最终可能会耗尽可用线程,并且无法处理分配给它的任务。
6
线程池旨在快速在不同线程上执行相对较短的任务,而无需花费创建新线程的开销。线程池拥有最大数量的线程,一旦达到,任务就会排队等待线程变为可用状态。
在线程池中休眠的线程因此会占据队列或导致线程池耗尽。
相关问题
- 1. 线程池在C#
- 2. C++线程池
- 3. 在C中中止睡眠线程#
- 4. 如何唤醒一个沉睡的线程在Mac
- 5. 调试线程池在C#
- 6. C#线程池HttpWebRequests
- 7. C#和线程池
- 8. C++睡眠线程冲突
- 9. C#线程不会睡觉?
- 10. c#睡眠线程问题
- 11. Java - 沉睡的线程模拟变化的图像
- 12. 在``C``线程池中运行'POSIX`线程在``C``线程池中运行`函数指针`
- 13. 在c中创建线程池#
- 14. 带睡眠C中的线程化
- 15. C++:线程池比单线程慢吗?
- 16. 线程池中的线程
- 17. C#,IAsyncResult和线程池
- 18. C++ 11动态线程池
- 19. 在C#中的线程池类管理线程执行
- 20. C++中的线程池设计
- 21. .NET中创建线程池(C#)
- 22. C#中简单线程池的代码
- 23. Visual C++ 2012中的线程池
- 24. 中断睡眠线程
- 25. 睡眠时线程中断
- 26. 单线程中断睡眠
- 27. 线程中睡眠问题
- 28. C#线程的状态和“睡眠”
- 29. 如何睡觉一个C++ Boost线程
- 30. C#:睡一个线程块其他?
你的第一线似乎被什么你休息相矛盾说。当然,阻止队列或线程耗尽是一个直接的性能下降? – Chris 2011-06-10 11:47:37
我的意思是睡在泳池线程不会降低该线程的性能。这个说法有点糟糕,我同意。我已将其删除。 – Sven 2011-06-10 11:52:23
啊,是的,我明白你的意思了。它不会降低一个线程的性能,但会降低使用该池的整个过程的性能。这确实有道理。 :) – Chris 2011-06-10 13:52:14