并发编程..

2009-05-13 07:11:47来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折


引子

2005年3月,C++大师Herb Sutter在Dr.Dobb’s Journal上发表了一篇名为《免费的午餐已经结束》的文章,一石激起千层浪,该文引起了社区广大程序员的热烈讨论。文章指出:现在的程序员对效率、伸缩性、吞吐量等一系列性能指标相当忽视,很多性能问题都依仗越来越快的CPU来解决。但CPU的速度很快将偏离摩尔定律的轨迹,并达到一定的极限。所以,越来越多的应用程序将不得不直面性能问题。而解决这些问题的办法就是采用并发编程技术。当你读到这里的时候,第一感觉可能就是“不敢苟同”,觉得作者在危言耸听,妖言惑众,过分渲染并发编程的重要性。
其实不然,正如Herb Sutter所说,由于串行处理速度的限制已经把“并发编程”推到了聚光灯下,串行化技术在程序设计中的砥柱地位在未来必将被取代,一个多核与并发编程的时代必将到来。由于当今大多数程序员对并发编程还是一片空白,因此深入了解和学习并发编程已经刻不容缓。甚至,还有人提出了“不懂并发编程的程序员,不是一个合格的程序员”的观点。不管愿意接受与否,“免费的午餐”的确已经结束。
何为并发
大家也许还记得那个懵懂的中学时代吧,手捧课本,端坐教室,听华罗庚大师讲“烧水沏茶”的故事。他将统筹学原理运用到日常生活中,竟然产生事半功倍的效果,给了我们很大的启示。手敲键盘之际,调试程序之余,与同事神侃之时,我们是否应该坐下来静静地思考一下,能否将“烧水沏茶”的道理运用到程序设计与开发的过程中呢?能否在编写程序的时候把类似于劈材、打水、烧水、拿茶叶、泡茶等一系列的程序行为并发执行?答案是:完全可以。这正是“并发编程”的绝妙之处,也是本文将要给大家介绍的内容。
首先,我们来看一看“何为并发”。如果两个事件在同一时间间隔内发生就称之为并发(concurrency)。两个或多个任务在同一时间间隔内执行叫做并发执行。
我们再通过一个现实生活中的例子来阐述并发的机理。现在满大街都是减肥广告,减肥成了众多人乐此不疲的话题。但是正确的减肥方法并不能单纯地依靠节食或药物,一个好的减肥方案往往需要同时考虑“适当的节食”和“一定强度的锻炼”。我们可以把“节食”和“锻炼”看作是并发执行的任务,也就是说改进饮食结构和正规的身体训练必须要在同一时间间隔内发生,这样才可以达到减肥的目的。通过这个例子,我们可以得出这样一个结论:任何一个逻辑控制流和另外的逻辑控制流在某一时间段内相互重叠,这就是并发。并发技术使得应用程序在同一时间段内能够做更多的工作,极大地提高了效率,同时也增强了程序的可伸缩性。
软件并发的基本层次
并发总体上可分为三个层次:软件级的并发、操作系统级的并发和硬件级的并发。一般来讲,硬件级的并发和操作系统级的并发都会支持软件级的并发,由于操作系统级并发和硬件级的并发不是我们普通程序员所能支配的,所以我们着重关注软件级的并发。
并行和分布式编程是达到软件级并发的两种基本途径。它们是两种不同的,但有时又相互交叉的编程方法。并行编程技术是将程序分配给单个或多个处理器运行,这些处理器通常在某一个物理或虚拟的计算机内;而分布式编程技术是将程序分配给两个或多个处理器运行,这些处理器可能在也可能不在同一个计算机中。在纯粹的并行程序中,并发执行的部分往往都是同一个程序中的某些部分,而在分布式程序中,这些并发执行的部分通常往往被实现成分离的程序。这两者之间的区别及程序的典型结构如图1和图2所示:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:如何编写高性能的网络服务器

下一篇:FreeBSD 6.2 下安装刻录软件 K3b