Yan*_*hof 19 .net c# task-parallel-library
据我所知,Task和Thread之间的区别在于,任务发生在线程池中,而线程是我需要自己管理的东西..(并且该任务可以取消并返回到线程池中他的任务结束)
但在一些博客中,我读到如果操作系统需要创建任务并创建thread =>,那么创建(和销毁)任务将更容易.
有人可以解释为什么创建任务很简单那个线程?
(或许我在这里遗漏了一些东西......)
Chr*_*ain 19
当你说Task是一个System.Threading.Task时,我想你正在谈论的是什么.如果是这种情况,那么你可以这样思考:
为了解决这个问题,.NET框架允许您创建任务.任务是捆绑到对象中的一些工作,它们允许您执行有趣的事情,例如捕获该工作的输出并将工作链连接在一起(首先去商店,然后购买杂志).
任务计划在线程池上.具体的线程数取决于所使用的调度程序,但默认调度程序会尝试选择一些线程,这些线程最适合您拥有的CPU核心数以及任务实际使用CPU时间的时间.如果您愿意,您甚至可以编写自己的调度程序来执行特定操作,例如确保该调度程序的所有任务始终在单个线程上运行.
因此,将任务视为待办事项列表中的项目.你可能一次可以做5件事,但如果你的老板给你10000,他们会在你的收件箱堆积,直到你做的前5个完成.Tasks和ThreadPool之间的区别在于Tasks(我之前提到过)可以让你更好地控制不同工作项之间的关系(想象一下多个指令被钉在一起的待办事项),而ThreadPool只允许你排队一堆单独的单项目(功能).
Ada*_*cin 11
您正在听到两种不同的任务概念.第一个是工作的概念,第二个是工作的概念.
很久以前(用计算机术语),没有线程.程序的每个运行实例都称为一个进程,因为它只是一个接一个地执行一个又一个,直到它退出.这将过程的直观概念与工厂装配线的一系列步骤相匹配.操作系统管理进程抽象.
然后,开发人员开始向工厂添加多条装配线.现在,程序可以同时执行多个操作,并且库或(更常见的是)操作系统将管理每个线程内的步骤的调度.线程是一种轻量级进程,但线程属于进程,进程中的所有线程共享内存.另一方面,多个进程不能混淆彼此的记忆.因此,Web服务器中的多个线程都可以访问有关连接的相同信息,但Word无法访问Excel的内存中数据结构,因为Word和Excel作为单独的进程运行.将进程作为一系列步骤的想法与具有线程的进程模型并不真正匹配,因此有些人将"抽象以前称为进程"称为任务.这是您在博客文章中看到的第二个任务定义.请注意,很多人仍然使用"进程"这个词来表示这一点.
好吧,随着线程变得越来越普遍,开发人员在它们之上添加了更多的抽象,以使它们更容易使用.这导致了线程池的兴起,这是一个由库管理的线程池"池".您将库传递给作业,库选择一个线程并在该线程上运行作业..NET框架有一个线程池实现,当你第一次听说"任务"时,文档真正意味着你传递给线程池的工作.
所以从某种意义上说,文档和博客文章都是正确的.任务一词的超载是令人遗憾的混乱之源.
线程已经成为.Net的一部分v1.0,任务是在.Net 4.0中发布的任务并行库TPL中引入的.
您可以将Task视为Thread的更复杂版本.它们非常易于使用,并且具有很多优于Threads的优点,如下所示:
线程上任务的缺点:
一些提示: - 始终使用语法完美和标准的Task.Factory.StartNew方法.
有关更多信息,请查看Task Parallel Libray http://msdn.microsoft.com/en-us/library/dd460717.aspx
| 归档时间: |
|
| 查看次数: |
11064 次 |
| 最近记录: |