【独家特稿】虽然在.NET 4.0 Beta 1中支持并行扩展的CTP(社区技术预览)下很难在新的并行模式下调式代码,但是并不难理解在并行循环中发生的事。之所以难以调试新的基于任务的程序代码,最大的问题是CTP没有为任务增加调试功能,IDE(Visual Studio 2008)只能用于调试线程,因此它无法正确调试任务。
创新互联-专业网站定制、快速模板网站建设、高性价比保靖网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式保靖网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖保靖地区。费用合理售后完善,十年实体公司更值得信赖。
如果你了解C风格编码,下面这行文字就是总结性描述:
- (Threads != Tasks) && (Thread != Task)
你可以在http://www.ddj.com/go-parallel/blog/archives/2009/06/find_john_fast.html;jsessionid=DP2HCMAT3F55PQE1GHRSKHWATMY32JVN查看由Cameron Hughes和Tracey Hughes特别处理过的图,它们分成了七层进行描述,从域模型层到硬件层,应用程序任务层(第三层)位于逻辑任务层(第四层)和进程/线程层(第五层)之上。
正如前面引用的图所表示的意思,任务可以同时运行在不同的层上,但都是由线程支持任务执行的,因此任务要使用处理器时间从不同线程窃取工作,我已经在我之前的文章“.NET 4.0 Beta 1和之前的版本中的工作窃取队列”(原文链接:http://www.ddj.com/go-parallel/blog/archives/2009/06/work_stealing_q.html;jsessionid=TVDMASWBJE4GZQE1GHOSKHWATMY32JVN)中解释了这一机制。
当你使用任务工作时,它们使用基本线程(软件线程,在某些硬件线程或逻辑内核上调度)运行它们的代码,但在任务和线程之间没有一对一的关系,这就意味着不是每次创建任务时都会创建一个线程,CLR创造了必要的线程以支持任务的执行需要,当然,这是一个简化版本。
在使用基于任务的编程时,你可以利用你已掌握的大部分技术,但需要学习新的调试技术,Visual Studio 2010虽然处于Beta 1阶段,但仍然提供了两个新的调试窗口:
◆并行堆栈
◆并行任务
这些新的窗口让你可以理解正在运行的任务与之相关的线程之间的关系,这样你就可以调试基于任务的代码,不会再遇到CTP测试期间发现的问题。
开始使用基于任务的算法编码之前弄清楚任务和线程之间的差异是很重要的,新的调试窗口为开发人员提供了良好的信息理解并行循环和并行任务。
许多开发人员使用并行扩展CTP,但没有合适的调试器了解具体发生了什么,它们认为任务难以控制,如果没有这些新的调试窗口它们确实很难理解。
有句丹麦谚语说的好,“迅速执行是好运之母”,因此需要转向使用基于任务并行编程!
原文名:Tasks Are Not Threads in .NET 4 Beta 1
作者:Gaston Hillar
本文标题:.NET4.0中任务与线程关系谈
浏览地址:http://www.mswzjz.cn/qtweb/news26/481926.html
温江区贝锐智能技术服务部_成都网站建设公司,为您提供动态网站、移动网站建设、用户体验、域名注册、网站建设、全网营销推广
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能