频道栏目
读书频道 > web开发 > .NET > C#并行编程高级教程:精通.NET 4 Parallel Extension
1.5 使用轻量级并发模型
2012-07-08 21:51:36     我来说两句
收藏   我要投稿
本书旨在帮助有经验的C#开发人员能够利用.NET Framework 4中引入的Parallel Extensions,将现代微处理器中的多核处理能力转换为应用程序的性能。无论您是刚刚开始从老的多线程模型开始转换,还是已经有过一些...  立即去当当网订购
Amdahl法则和Gustafson法则都没有考虑引入并行所带来的开销。这两个法则也没有考虑到存在一些模式能够将串行部分转换为能够充分利用并行化的新算法。减少应用程序中串行部分的代码对于提高并行执行单元的使用率而言非常重要。
 
在以前版本的.NET Framework中,如果想要在C#应用程序(一个进程)中并行地运行代码,那么您必须创建并管理多个线程(软件线程)。因此,您必须编写非常复杂的多线程代码。将算法分解为多个线程、协调各个代码单元、在代码单元之间共享信息以及收集运算结果等任务实在是非常复杂的程序设计工作。随着逻辑内核的增加,这个任务会变得更加复杂,因为您需要通过更多线程来获得更好的可扩展性。
 
多线程编程模型的设计并不是为了帮助开发人员面对多核革命。事实上,创建新的线程需要执行大量的处理器指令,而且可能会对已经分解为并行化线程的代码引入太大的开销。很多有用的数据结构和类在设计上并没有考虑到被多线程访问,因此,为了能够实现这一点还需要添加很多代码。这些额外的代码会使得开发人员的注意力偏离主要目标:通过并行执行来提升性能。
 
由于这个多线程模型过于复杂,难以应对多核革命,因此这个模型被称为重量级并发(heavyweight concurrency)。这个模型加入了严重的开销,需要编写很多代码来处理由于框架层次缺乏对多线程访问的支持而带来的问题,并且会导致代码复杂难以理解。
 
由于以前版本的.NET Framework所提供的多线程模型和现代微处理器日益增长的逻辑内核数引发的上述问题,促进了允许创建并行化代码的新模型的创建。这个新模型称为轻量级并发(lightweight concurrency),这个模型减少了在不同逻辑内核上创建和执行代码所需要的总开销。这并不是说能够完全消除并行化带来的开销,但是这个模型本身是为现代多核微处理器而设计的。重量级并发模型是在多处理器的时代出现的,在那个时代计算机可能有很多物理微处理器,每个微处理器只有一个内核。轻量级的并发模型考虑了新的微架构,这个架构中有很多由一些物理内核支撑的逻辑内核。
 
轻量级并发模型并不只是关注不同逻辑内核之间的作业调度,它还在框架级别添加了对多线程访问的支持,从而使得代码更容易理解。
 
大多数现代程序设计语言都在向轻量级并发模型变革,幸运的是,.NET Framework 4也加入了这一波变革。因此,所有能够生成.NET应用程序的托管语言都能够充分利用这种新的模型并发挥其优势。
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.4 考虑Gustafson法则
下一篇:1.6 创建成功的基于任务的设计
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站