多線程系列(三)之線程池
.NetFramework1.0時代的Thread,API功能繁多,對線程的數量是沒有管控的,在.NetFramework2.0時代推出了ThreadPool,如果某個對象建立和銷毀代價比較高,同時這個對象還可以反複使這些線程,就需要使用線程池,線程池可以儲存多個線程對象,需要使用線程時直接從線程池裡面拿,使用完之後不做釋放,又放回池子(享元模式),需要用的時候再去拿。這樣可以減少建立線程的開銷,提升性能,此外,還可以管控線程的總數量,防止資源濫用。
委托異步調用、Task、Parrallel、async/await的線程全部都是線程池裡面的線程。直接new Thread開起的線程不受線程池的數量限制(但是會占用線程池的線程數量)。
I/O線程是.NET專為通路外部資源所設定的一種線程,因為通路外部資源常常要受到外界因素的影響,為了防止讓主線程受影響而長期處于阻塞狀态,.NET為多個I/O操作都建立起了異步方法。
單個線程等待:
多個線程等待: