ThreadPool 保持线程空闲,而不是创建和拆除它们,虽然不是一直都是基于给定时间有多少线程。
即使我不知道线程创建和销毁期间的整个过程,为什么比让线程空闲更昂贵。
ThreadPool 保持线程空闲,而不是创建和拆除它们,虽然不是一直都是基于给定时间有多少线程。
即使我不知道线程创建和销毁期间的整个过程,为什么比让线程空闲更昂贵。
好吧,因为简单地说,空闲线程什么都不做。它只是在等待工作。创建线程涉及分配内存、负载平衡……各种幕后工作。
创建托管线程时会发生很多事情。显然,线程的本地和托管数据结构都被创建了。此外,托管线程提交其整个 1 MB 堆栈空间,并分配额外的每个线程数据结构。简而言之,这是一个非常昂贵的分配。
通过保留线程并重用它们(例如通过线程池),这个成本被摊销了。话虽如此,您仍然不想让过多的线程闲逛,因为即使在空闲时它们也会占用资源。因此,线程池将定期终止空闲线程以回收资源。
仅仅因为空闲线程不做任何事情。
创建线程会执行大量工作(分配内存、创建管理线程所需的数据结构等)。所有这些工作都为一个池线程完成一次,而不是每次线程有工作时都执行一次。