根据我对任务与线程之间区别的理解,任务发生在线程池中,而线程是我需要自己管理的事情..(并且该任务可以取消并返回到线程池中。他的任务结束)

但是我在一些博客中读到,如果操作系统需要创建任务并创建线程=>,则创建(和销毁)任务会更加容易。

有人可以解释为什么创建任务是那个线程那么简单?

(或者我在这里想念什么……)

最佳答案

我认为您说Task时所说的是System.Threading.Task。如果是这样,那么您可以这样考虑:

  • 一个程序可以有多个线程,但是一个处理器内核一次只能运行一个线程。
  • 线程的非常昂贵,而则非常昂贵,并且正在运行的线程之间的切换也非常昂贵。
  • 所以...有成千上万的线程在做事情效率低下。想象一下,如果您的老师给您完成了10,000个任务。您将花费太多时间在他们之间循环,以至于您什么也做不完。如果启动太多线程,CPU可能会发生同样的事情。

  • 为了解决这个问题,.NET框架允许您创建任务。任务是 bundle 在一个对象中的一些工作,它们使您可以做一些有趣的事情,例如捕获工作的输出并将工作链在一起(首先去商店,然后买杂志)。

    任务是在线程池上安排的。具体的线程数取决于使用的调度程序,但是默认的调度程序会尝试选择最适合您拥有的CPU内核数量以及任务实际使用CPU时间花费多少时间的线程数量。如果愿意,您甚至可以编写自己的调度程序来执行特定的操作,例如确保该调度程序的所有任务始终在单个线程上运行。

    因此,可以将“任务”视为待办事项列表中的项目。您可能可以一次执行5件事,但是如果老板给您10000,他们会堆积在您的收件箱中,直到您要做的前5件事为止。 Tasks和ThreadPool之间的区别在于,Tasks(如我之前提到的)使您可以更好地控制不同工作项之间的关系(想象将多个指令装在一起的待办事项),而ThreadPool仅允许您排队一堆单独的单阶段项目(功能)。

    关于c# - Task(System.Threading.Task)和Thread之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9493421/

    10-17 02:11