2

ThreadPool 保持线程空闲,而不是创建和拆除它们,虽然不是一直都是基于给定时间有多少线程。

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

4

3 回答 3

3

好吧,因为简单地说,空闲线程什么都不。它只是在等待工作。创建线程涉及分配内存、负载平衡……各种幕后工作。

于 2012-06-12T17:48:13.933 回答
2

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

通过保留线程并重用它们(例如通过线程池),这个成本被摊销了。话虽如此,您仍然不想让过多的线程闲逛,因为即使在空闲时它们也会占用资源。因此,线程池将定期终止空闲线程以回收资源。

于 2012-06-12T17:58:52.297 回答
1

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

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

于 2012-06-12T17:47:39.537 回答