.NET 4.0中任务与线程关系谈
创始人
2024-04-30 13:40:22
0

【51CTO独家特稿】虽然在.NET 4.0 Beta 1中支持并行扩展的CTP(社区技术预览)下很难在新的并行模式下调式代码,但是并不难理解在并行循环中发生的事。之所以难以调试新的基于任务的程序代码,最大的问题是CTP没有为任务增加调试功能,IDE(Visual Studio 2008)只能用于调试线程,因此它无法正确调试任务。

如果你了解C风格编码,下面这行文字就是总结性描述:

  1. (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

【编辑推荐】

  1. .NET缓存机制探讨与比对
  2. .NET内存映射文件原理、创建及进程通讯
  3. .NET 4.0 Beta 2将引入新的网络功能 修复大量Bug
  4. .NET 4.0 Beta 1新增STM特性概览
  5. .NET 4.0 Beta 1将为PLINQ带来生机?

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...