2007年4月刊《程序员》,专题为“多核时下的软件开发”。《程序员》并非阳春白雪,它面向大众程序员。面向大众的《程序员》介绍多核、并发,也意味着并发程序设计的开始进入中国大众程序员的视野。

并发程序设计,在很多的书籍或者文章中,都会提到他的一个特点,复杂。这个特性,也导致了在以往并发程序设计只为高级程序员所专用。

复杂度并非事物的固有属性,并发程序设计的复杂,是我们主观认为。我们认为并发程序设计复杂,是因为我们还没有掌握一些使其简单化、清晰化的方法。当我们掌握相关方法,研究彻底,并发就会变得简单。这个过程已经开始了。

以 往,我们需要直接使用一些低级并发概念来构造系统,不断发明轮子,容易出错,难以调试,这种的并发程序设计当然复杂,因此也只能为高级程序员所专用。如此 环境,就如同Dijkstra给我们带来结构化程序设计之前的世界一般。很幸运的是,一些软件业的先驱们,已经抽象出一些概念,能够使得并发程序设计简单 化,清晰化。例如Future、Lock-free思想等。

在主流编程语言中,Java走在最前头,理念领先,提供了实用的库。在 Java SE 5.0中就提供了util.concurent包,包括了Future、Executor、BlockingQueue等,一系列lock-free的数 据结构,例如ConcurrentMap。包括并发流程控制工具类:CountDownLatch、CycliBarrier。还有精巧好用的 DelayQueue(参考我之前写过的文章http: //www.cnblogs.com/jobs/archive/2007/04/27/730255.html)。使用这些概念以及提供的模式,能够使 得编写并发程序简单化。

C++中,Herb Sutter在Visual C++中加入了很多支持并发的语法特性,包括atomic、future等。boost的线程库开始引入了第一个高级概念barrier。

Windows 平台本身提供了功能强大的并发API,包括WaitForSingle系列,WaitForMulti系列,Auto和Manual模式的Event等 等。.NET平台基本没有任何自有的并发库和工具类,完全是Windows API的简单封装。可以这么说,.NET的类库没有为并发作任何事情,完全吃Windows API的老本。

如同Herb Sutter认为,我们很幸运处于并经历这个软件大变革(并发)。并发进入主流这个过程将会延续数年,Herb Sutter认为是2007-2012。
参考我以前写的一篇文章(Herb Sutter的一些观点 http://www.cnblogs.com/jobs/archive/2006/11/12/558078.html)

类 似的场景也有,早期面向对象技术,也只为少数高级程序员所掌握,现在刚入门的程序员都能说上一大通。数据结构算法也是,早期只为少数优秀程序员所掌握,但 现在主流的开发环境中就包括了主要的数据结构和算法,会用的人一把一把,会用List、Hashtable、快速排序一点也不酷。并发程序设计也一样,将 不再是阳春白雪!

面向对象技术在最初在Simula语言中引进,顾名思义,最初朴素的面向对象思想就是模拟,在程序中模拟真实世界。这种 “模拟”,使得程序的组织清晰化,简单化。但真实世界是充满着并发。真实世界的并发要比虚拟环境中的并发要复杂的多,但是人们轻松应付,由此,我们有足够 的理由相信,并发程序设计将不会是一种复杂难掌握的技术。
posted on 2007-05-01 08:54 温少的日志 阅读(1391) 评论(2)  编辑  收藏
Comments
  • # re: 旧时王谢堂前燕,飞入寻常百姓家
    我为J狂
    Posted @ 2007-05-02 10:59
    我们站在巨人的肩膀上,真是太幸福了。  回复  更多评论   
  • # re: 旧时王谢堂前燕,飞入寻常百姓家
    yufeng0681
    Posted @ 2007-05-02 11:49
    其实工具种类同质化,说明了软件的发展还是有很大潜力的。
    大发展会来自第一次的开发平台的统一。
      回复  更多评论   

只有注册用户登录后才能发表评论。


网站导航: