与Thread相比,Task是轻量级的吗?

Ric*_*ard 6 multithreading c#-4.0

我无意中听到一位同事说任务基本上是一个轻量级的线程.来自C++背景(最轻量级处理单元的线程),这对我来说似乎是违反直觉的.

任务不像线程一样重吗?

Chr*_*man 7

您需要区分工作单元(任务)与用于托管/执行它们的基础流程.任务甚至不需要在其他线程上运行.例如,可以在单线程应用程序中执行任务,该应用程序定期对任务池进行控制.

即使在不同的线程上执行任务,任务和线程之间通常也没有1对1的关系.线程被预先分配为池的一部分,然后任务被安排在这些线程上运行.创建新任务不需要创建线程的开销,它只需要任务队列中的enque成本.

这使得任务本身具有更大的可扩展性.在我的应用程序的整个生命周期中,我可以拥有数百万个任务,但实际上只能使用一些恒定数量的线程.

  • @mbeckish你是对的,我相信标准的实现正是如此,ThreadPool之上的易用层. (3认同)
  • "这使得任务本身具有更大的可扩展性." 应该注意,这不是"任务"所特有的.较旧的`ThreadPool`类提供与IO控制端口相同的可伸缩性,或仅实现具有固定数量的消费者`Thread`s的生产者/消费者队列. (2认同)