为什么创建新线程比保持闲置更昂贵?

时间:2012-06-12 17:45:50

标签: .net multithreading

ThreadPool保持线程空闲而不是创建和拆除它们,而不是所有时间都基于它有给定时间的线程数。

即使在线程创建和销毁过程中我不知道整个过程,为什么比线程空闲更昂贵。

3 个答案:

答案 0 :(得分:3)

好吧,因为简单地说,一个空闲的线程没有做任何。它只是在等待工作要做。创建一个线程涉及分配内存,负载平衡...幕后的各种东西。

答案 1 :(得分:2)

创建托管线程时会发生很多事情。显然,创建了线程的本机和托管数据结构。此外,托管线程提交其整个1 MB堆栈空间,并分配额外的每个线程数据结构。简而言之,这是一个非常昂贵的分配。

通过保持线程并重新使用它们(例如通过线程池),这个成本是摊销的。话虽如此,你仍然不希望有太多的线程只是闲逛,因为它们甚至在闲置时也会占用资源。因此,线程池将定期终止空闲线程以回收资源。

答案 2 :(得分:1)

仅仅因为空闲线程不做任何事情。

创建线程执行大量工作(分配内存,创建管理线程所需的数据结构等)。所有这些工作都是针对池化线程完成的,而不是每次为线程工作时执行一次。