文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发软件工程软件与并发巨变 不得不面对的革命
精品推荐
特别推荐
·Tomcat中用web.xml控制Web应用详解
·计算机网络工程课程讲解
·COM, COM+ and .NET 的区别
·ISO9000:2000 质量管理八大原则(1)
·Struts框架及其在Web开发中的应用
·献给汇编初学者-函数调用堆栈变化分析
·质量管理的十三项步骤和八项原则(1)
·质量管理体系审核全解(1)
·WinCE.Net平台下电力巡检仪数据同步研究与实现
·黑盒测试和白盒测试
热点TOP10
·编写质量手册
·Visual Studio 2005集成开发环境图解
·清除window 2000/XP系统中的无用设备的驱动程序
·编程不难学?
·LINQ 性能分析系列之传说中的LINQ
·.NET设计模式之工厂方法模式
·建模过程的盲点:软件集成中的软知识
·用XMLTextReader类加速.NET中XML存取
·Rational统一过程
·揭开.NET消息循环的神秘面纱

软件与并发巨变 不得不面对的革命

日期:2008年6月3日 作者: 查看:[大字体 中字体 小字体]


  深远影响

  在过去30年里,并发虽然一直被鼓吹为“下一件大事”或“未来之路”,但软件界不为所动。现在,并行终于出现在我们面前了:新一代计算机全面支持并发,这将引发软件开发方式的巨变。

  本文主要讨论并发对软件——包括编程语言和程序员——的深远影响。

  Olukotun和Hammond所描述的硬件发展,代表着计算机计算方式的重大变化。过去30年里,半导体工业的发展及其在处理器上的应用,推动了已有顺序式软件运行速度的稳步提升。但体系结构上的多核处理器变化仅对并发应用有益,因此几乎对绝大多数现存软件没有价值。在不久的将来,已有的桌面应用不可能比现在跑得更快。实际上,它们的运行速度会稍慢,因为为了降低高密度多核处理器的电能消耗,新的芯片内核被简化并运行在更低的时钟速度。

  这将对软件至少是主流软件的开发带来深远影响。计算机的能力无疑越来越强,但程序不再可能从硬件性能提升大餐中免费获益,除非它们实现了并发。

  即便抛开多核变化的强制要求不谈,我们也有理由实现并发,尤其是将工作从同步转到异步,可以提高响应速度,就像目前的应用里必须让工作远离GUI线程,以便计算在后台进行时,屏幕能得到重绘。

  但实现并发是有难度的。不仅目前的语言和工具仍未为将应用转化为并行程序做好充分准备,而且在主流应用中也很难找到并行,尤其糟糕的是——并发要求程序员以人类难以适应的方式思维。

  不过,多核在未来不可回避,我们必须找到与之相适应的软件开发方式。接下来,我们将深入探讨并发的难度所在,以及一些未来可能的应对方向。

  软件新纪元

  今天的并发编程语言和工具几乎与结构化编程时代初期的顺序化编程同时起步。信号量和协程是实现并发的基本手段,锁与线程建立在更高层次,可以结构化构造并发程序。而我们需要的是以面向对象为基础的并发——建立在更高层次的抽象有助于构建并发程序,就像面向对象抽象有益于构建大型组件化程序一样。

  几个因素决定了并发变革对我们冲击可能比面向对象大。首先,并发是获得更高性能的必需手段。像C之类的语言,无视面向对象,但仍能在很多开发领域发挥作用。如果并发变成了应用性能提升的华山一条路,那么商业和系统语言的存在价值就只能建立在支持并发编程的基础上。因此现存的如C之类的语言,就必须支持超越pthreads之流简单模式以外的并发特性,不能支持并发编程的语言将逐步走向消亡,而仅仅能在现代硬件不重要的场合占得一席之地。

  并发比面向对象冲击更大的第二个原因是,尽管顺序化编程已经很难,但并发编程更难。例如,在分析顺序化程序时,环境相关性分析是考量环境影响行为的基础技术。并发程序则还需要进行同步分析,而同时做环境相关性和同步分析已经被证明不可企及

  最后,人类在遭受并发的突然袭击后,发现并发程序比顺序化代码难以把握得多。即使最细心的程序员,也很可能考虑不到简单半有序作业集里的交叉问题。

  客户端和服务端应用的差别

  对客户端应用来说,并发是一个挑战。但是在很多服务端程序里,并发则是一个“已经解决的问题”,我们可以例行公事般地构造并发应用,结果它就能很好工作,尽管进一步改进程序以确保其更具扩展性,仍需艰巨努力。这些程序通常都包含大量并行,因为它们同时处理的是大量的彼此无关的请求。比如Web服务器和网站,运行的是同样代码的副本,处理绝大多数时候彼此无关的数据。

  而且,它们的执行环境被隔离,通过高度支持并发存取结构化数据的数据库之类的抽象数据访问方式实现状态共享。因此,代码通过数据库实现数据共享,就能得到“安宁从容的感觉”——就好像运行在一个整洁、单线程的世界一样。

  而客户端应用的世界里,则没有那么规则和结构化。通常,客户端程序为单用户执行相关的小型运算,由此出发,我们发现可以通过将运算分割为多个更有效率的小片断来实现并发。也就是说让用户界面和程序运算小片断可能以多种方式交互和共享数据。但这类程序难以并发执行,因为其代码是非均态的,结构密织、交互复杂,而且操作的是基于指针的数据结构。

  并行

  ·编程模型(Programming Models)

  现在,你能用多种方式实现并行,但每种方式仅仅适用于特定类型程序。大多数时候,没有细致入微的设计与分析,很难事先知道哪种模型适合给定问题。如果无法清楚确定给出的问题能套用哪种模型,往往就必须将多个模型杂合起来灵活运用。

  这些并行编程模型可以从以下两个方面明确加以区分:并行作业的粒度,和任务间的耦合程度。这两个方面的不同,造就了迥异的编程模型。我们接下来依次讨论。

  并行作业,小到单个指令,比如加法和乘法运算,大到需花费数小时甚至数天的程序。显然,并行体系中小作业的累计耗费是巨大的,因此,像并行指令运算等一般要求用硬件实现。与多处理器结构相比,多核处理器减少了通讯和同步消耗,因此减少了小片代码的累计成本。同样,一般来说,粒度划分越小,就越要注意拆分任务、以及为它们提供彼此间通讯和同步的成本。

  另一方面是作业在通讯和同步时的耦合程度。不要有这样的幻想:作业完全独立执行,最后产生完全不同的输出。在这种情况下,各作业有序执行,不会引发同步和通讯问题,很容易实现无数据竞争可能的编程。这样的情况是罕见的,绝大多数程序的并发作业都要共享数据。因此作业更为变化多端,保证其正确和高效的复杂性也大为增加。最简单的情况是每个任务执行完全一样的代码。这种类型的共享常常是规则的,通过对单个任务的分析就能理解。更具挑战性的是不规则并行,这个时候,各作业的情况互不相同,共享模式更难于理解。


[1] [2] [3] [4] [5] 下一页 




上一篇:免费午餐已经结束——软件向并发靠拢

下一篇:JAVA设计模式之事务处理

相关文章:
·Windows系统漏洞修复软件大比拼
·vista分区软件
·大智慧股票软件Level-2入门手册
·俄罗斯杀毒软件大蜘蛛登陆中国
·EasyRecovery 604硬盘数据恢复软件技巧
·如何阻止局域网用户使用P2P软件下载
·慧眼识金 四款智能选股软件显身手
·不用任何软件(木马程序)盗取账号密码
·趣味变声软件——AV VCS
·用客户端软件收发Hotmail Yahoo邮件
相关软件:
·WisMencoder(视频压缩、转换软件)V1.99 正式版
·整形模拟软件_非常face V1.0
·手机SIM卡备份一卡多号(手机魔卡)万能读写软件V9.0
·诺顿杀毒软件+诺顿防火墙免费破解版 免注册永远自动升级
·颐家IDO在线互动设计软件
·大众翻译软件(时代翻译通)V7.0
·统计软件SAS教程
·诺顿杀毒软件+诺顿防火墙免费破解版 免注册
·电脑报 2002年合订本光盘精简版(软件版)
·瑞星杀毒软件2008下载版(完全免费)V20.36.32

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot