我们现在通过实现 Task.Factory.StartNew() 来使用任务并行库。有没有办法检查应用程序在执行任务时产生了多少线程?
目前我们正在开发环境中在双核处理器中运行该应用程序。
我们现在通过实现 Task.Factory.StartNew() 来使用任务并行库。有没有办法检查应用程序在执行任务时产生了多少线程?
目前我们正在开发环境中在双核处理器中运行该应用程序。
除非您使用自定义调度程序或传递 TaskCreationOptions.LongRunning 选项,否则 TPL 在执行任务时不会产生任何线程。即便如此,由 TaskScheduler 决定如何处理长时间运行的任务。
TPL 将单个任务调度到一个线程池中,以供池中的线程执行。每个线程都有自己的队列,以减少多核机器中的冲突。如果线程太忙,框架会使用一些工作窃取魔法将任务分配给同一线程池中的空闲线程。
查看tpl 如何使用 CLR 线程池以获取更多信息,以及Daniel Moth的这篇文章以获取有关工作窃取的详细信息。