Task和Thread有什么区别?今天在挖TPL,发现了一个新的Task。现在只想知道task和Thread有什么区别,哪个更好?任务和线程有什么区别?假设您正在经营一家图书配送公司。你有四辆车和四个司机。汽车是线程,司机是处理器,送书是任务。你面临的问题是如何高效地安排司机和汽车,使任务尽快完成。当汽车(线程)多于驱动程序(处理器)时,事情会变得很奇怪。然后发生的事情是司机在中途停放一辆车(暂停线程)并进入另一辆车(切换上下文),驾驶一辆车执行任务一段时间,然后最终返回第一辆车。显然,这不如将汽车停在一个车里那么有效。基于任务的并行性的思想是将工作分解成将来可以产生结果的小任务,然后高效地分配与处理器一样多的线程,这样就不会浪费时间进行上下文切换。在实践中,它通常不会很好地工作,但这就是想法。哪个更好,任务还是线程?这个问题无法回答,因为它没有任何意义。交付给客户的书和交付给客户的汽车哪个更好?汽车是一种可以用来运送书籍的设备;这两件事不是您可以聪明地描述为比另一件事“更好”或“更差”的事情。这就像问“哪个更好,一个洞还是一个钻头?”“任务”是将在未来某个时间点执行和完成的一项工作。“线程”是指执行某事的方式。通常当你创建一个任务时,默认情况下(即:使用Task.Factory.StartNew),任务将在某个时候被安排在ThreadPool线程上运行。然而,这并非总是如此。实现这种分离的好处是您允许框架(或者您自己,如果使用自定义TaskScheduler)控制如何将工作映射到可用线程。通常,您的工作项多于线程——您可能有一百万个项目要处理,但系统中只有8个核心。在这种情况下,使用固定数量的线程并让每个线程处理多个工作项会更高效。通过将“任务”与“线程”分开,您可以打破这种工作==线程的耦合。一般来说,我建议使用Task而不是创建自己的线程。这是用于开发的更好、更强大、更灵活的模型,特别是因为它允许您以非常干净的方式处理异常,允许生成诸如延续之类的好东西。这里有一些区别:任务是您想执行的动作或工作。线程可以是工作的执行者或工作执行者之一。根据MSDN参考文档:任务并行库(TPL)是.NETFramework版本4中System.Threading和System.Threading.Tasks命名空间中的一组公共类型和API。TPL的目的是通过简化向应用程序添加并行性和并发性的过程来提高开发人员的工作效率。TPL动态扩展并发性以最有效地利用所有可用处理器。此外,TPL处理工作分区、ThreadPool上的线程调度、取消支持、状态管理和其他低级细节。通过使用TPL,您可以最大限度地提高代码的性能,同时专注于程序的设计目的。因此,Task似乎是编写异步操作的首选方式,因为该框架处理了大部分工作。但另一方面,Thread仍然可以在现有代码中以及在您明确想要分配和管理OS线程的情况下使用。以上就是C#学习教程:Task和Thread的区别是什么?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
