"有时候排在队列中的其中一个或多个应用程序工作时间超过了规定的每个应用程序的排队时间,那么线程池不会坐视不管,线程池会创建一个新的线程来帮助另一个需要执行的应用程序".
1,应用程序工作时间就是应用程序执行时间吗?应用程序没有执行时,线程池是怎么知道工作时间会大于排除时间的?
2,什么是每个应用程序的排队时间?计算是程序之间先后执行顺序所需要的时间呢还是计算程序内部线程执行顺序所需要的时间?
谢谢指导!
这是问题补充:
是教程上说的,我不太明白..
CLR线程池最牛的地方就是它能够根据队列中的应用程序执行时间和各个排队应用程序间的
排队速度进行比较,从而决定是不是创建或者复用原先的线程,假如一系列的应用程序非常的简单
或者执行速度很快的情况下,根本无需创建新的线程,从而这个单一线程可以悠闲的挂起等待排队
的下一个应用程序。如果应用程序非常复杂或者层次不齐,那么正好相反,由于这个线程正在忙,
所以无暇对排队的下个任务进行处理,所以需要创建一个新的线程处理,这样陆陆续续会创建一些
新的线程来完成队列中的应用程序,如果在执行过程中多余线程会超时自动回收,而且CLR线程
池允许用户自定义添加最大线程数和最小线程数,但是出于性能的考虑微软不建议开发人员手动更
改线程池中的线程数量.
线程池不会来一个线程请求就会去开启一个线程,会让其先排队(如:规定它最多只能排1秒)。
如果有其它线程执行超过1秒还没结束,线程池就会创建一个线程去执行,相反其它线程都很快执行完了就不需要创建多余的纯种了,一个线程就可以完成。
线程的创建和销毁都是需要很多的开销的,所有就有了线程池的概念。
就好像你去银行办事,人不多的时候开2个窗口来办理就行了,但是如果人多的时候,那就需要开新的窗口来办理