在线程池之外创建线程有什么好处?

Bil*_*ani 3 .net c# multithreading asynchronous task

好的,所以我想知道当我使用TaskCreationOptions.LongRunning. 通过这个答案,我开始知道对于长时间运行的任务,我应该使用这个选项,因为它在 threadpool 之外创建了一个线程。

凉爽的。但是当我在线程池之外创建线程时,我会得到什么好处呢?什么时候做并避免它?

Yuv*_*kov 5

当我在线程池之外创建线程时,我会得到什么好处?

线程池,顾名思义,是分配一次并在整个过程中重复使用的线程池,以节省分配线程所需的时间和资源。池本身根据需要重新调整大小。如果您排队的工作比池中存在的实际工作线程多,它将以 500 毫秒的间隔分配更多线程,一次一个(这样做是为了避免在现有线程可能已经完成执行并且可以为请求提供服务的情况下同时分配多个线程)。如果在线程池上执行许多长时间运行的操作,则会导致“线程饥饿”,这意味着委托将开始排队并仅在线程释放后运行。这就是为什么您要避免大量线程使用线程池线程进行冗长的工作。

Managed Thread-Pool 文档也有一个关于这个问题的部分:

有几种场景适合创建和管理自己的线程,而不是使用线程池线程:

  • 您需要一个前台线程。
  • 您需要一个线程具有特定的优先级。
  • 您有导致线程长时间阻塞的任务。线程池具有最大线程数,因此大量
    阻塞的线程池线程可能会阻止任务
    启动。
  • 您需要将线程放入单线程单元中。所有 ThreadPool 线程都在多线程单元中。
  • 您需要具有与线程关联的稳定身份,或者将线程专用于任务。

有关更多信息,请参阅:

  • “线程池,顾名思义,是一个线程池。” - 哈哈哈 (7认同)