TPL任务,线程等

时间:2010-12-29 16:42:03

标签: multithreading task threadpool task-parallel-library

有人可以告诉我这些事情是如何相关的:

任务
螺纹
ThreadPool的主题
Paraller.For /的ForEach /调用

即。当我创建一个Task并运行它时,它在哪里获得一个线程来执行?当我打电话给Parallel。*真正发生的事情是什么?

对文章,博文等的任何链接也非常欢迎!

2 个答案:

答案 0 :(得分:1)

系统的理想状态是每个CPU核心有1个主动运行的线程。通过以“任务”的更一般术语定义工作,TPL可以动态地决定要使用多少线程以及在每个线程上执行哪些任务以便最接近实现理想状态。这些决策几乎总是最好在运行时动态制作,因为在编写代码时,您无法确定应用程序可用的CPU核心数,它们与其他工作的繁忙程度等等。

答案 1 :(得分:0)

线程:是一个真正的操作系统线程,有句柄和ID。

ThreadPool:是已创建的操作系统线程的集合。这些线程由运行时拥有/维护,并且您的代码只允许“借用”它们一段时间,您只能在这些线程中进行短期工作,并且您不能修改任何线程状态,也不能删除这些线程。

对这两者的最佳猜测:

任务:可能会在线程池中预先创建的线程上运行,或者可能作为用户模式调度的一部分运行,这完全取决于运行时认为最好的。另一个猜测:使用TPL,用户模式调度不是基于OS Fibers,而是它自己的完整(和工作)实现。

Parallel.For:实际上,不知道如何实现。运行时可能会创建新线程来执行并行位,或者更可能使用线程池的线程来实现并行性。