线程池是有最大最小容量的,可以用这两个方法查到: int threads; int ioTHreads; ThreadPool.GetMinThreads(out threads, out ioTHreads); ThreadPool.GetMaxThreads(out threads, out ioTHreads); 一开始线程池是空的。因为最大值是三千多,一次过都创建出来就太浪费了,而且在绝大多数的情况之下不需要。如果在允许范围之内,没有线程,或者没有空闲线程。则会创建一个新的线程。 用完之后它不会销毁,直接回到线程池但是,如果达到或者超过允许范围,后面来的 task 都要排队,线程池不会再创建新线程
int threads;
int ioTHreads;
ThreadPool.GetMinThreads(out threads, out ioTHreads);
ThreadPool.GetMaxThreads(out threads, out ioTHreads);
一开始线程池是空的。因为最大值是三千多,一次过都创建出来就太浪费了,而且在绝大多数的情况之下不需要。如果在允许范围之内,没有线程,或者没有空闲线程。则会创建一个新的线程。
用完之后它不会销毁,直接回到线程池但是,如果达到或者超过允许范围,后面来的 task 都要排队,线程池不会再创建新线程
我是看《操作系统之哲学原理》2.然后在看《clr via c》这本书~
好吧,开始回答楼主的问题~
你把线程想象成酒店的服务员~当一个土豪带一群朋友来吃饭,
一个服务员应付不过来,那酒店就再派一个去服务她们~
还应付不过来那就再派一个他们....有了这样的想象后,再来类比~
当计算机的任务很多的时候~ 可以创建线程(虚拟CPU)但线程的创建是很昂贵的~(招服务员)
所以就需要酒店经理(线程池)来管理服务员(线程)【最大可能重复利用,安排空闲地去工作,而不是不停地招】而你.NET开发者~作为酒店的CEO,只要告诉酒店经理有个土豪要来酒店~要他好好安排一下服务员的问题~
里面有关线程的内容写得很详细~
里面有关线程的内容写得很详细~
截图就是这本书里的...
里面有关线程的内容写得很详细~
就是因为这本书的这句话不够详细,所以让我很疑惑,到底是绝对只创建一个,还是可能创建N个。
里面有关线程的内容写得很详细~
就是因为这本书的这句话不够详细,所以让我很疑惑,到底是绝对只创建一个,还是可能创建N个。如果只是可以创建一个线程,那还要线程池干什么~