快速业务通道

冒号课堂§2.4:并发范式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

冒号课堂§2.4:并发范式

时间:2011-06-25 BlogJava xyz98

第二课 重要范式(4)

2.4 并发范式——合作与竞争

在合作中竞争,在竞争中合作            ——《竞合》

关键词:编程范式,并发式编程,线程,进程,过程式,函数式,逻辑式,对象式

摘要:并发式编程简谈

?提问

并发式编程有何特点?

并发式编程有哪些好处?

合理的并发式编程设计应满足哪些条件?

:讲解

逗号好奇地问:“还有其他类型的编程范式吗?”

“不但有,而且有很多。”冒号喝了一口水,悠悠地说,“并发式编程(concurrent programming)就是其中之一。”

叹号有些惊讶:“并发式编程也算一种范式?它似乎更像是提供运行效率的一种手段。”

“大谬不然。”冒号摇摇头,“真正的并发式编程,绝不只是调用线程[1]API或使用synchronized、lock之类的关键字那么简单。从宏观的架构设计,到微观的数据结构、流程控制乃至算法,相比通常的串行式编程都可能发生变化。随着硬件性能和用户需求的双重提升,并发式编程已成为不可回避的主题。毫不夸张地说,并发式编程是继OOP之后又一场思想和技术上的革命。只是相比OOP,尽管年龄相仿,但语言上不够支持,标准上不够统一,理论上不够完善,因而这场革命更具破坏性和建设性。现在我们来看一个例子,比较两种烧水泡茶的方案。”

说着冒号在黑板上写下——

方案一:洗茶杯;放茶叶;灌水壶;烧水;水开后泡茶。

方案二:灌水壶;在烧水的同时,洗茶杯;放茶叶;水开后泡茶。

引号见多识广:“我记得这好像是运筹学中的例子,显然方案二更佳。从编程的角度来看,方案一是串行式编程,方案二是并发式编程——烧水的线程与洗茶杯放茶叶的线程是同时进行的。”

“如果方案一也用并发式编程呢?”冒号追问。

引号一愣,随即道:“必须先洗茶杯后放茶叶,洗茶杯放茶叶的同时也没法烧水,至于泡茶,更得等水开之后了。”

句号明白了冒号的用意:“这就是说,单凭并发式编程并不能保证提高程序性能,还必须在程序设计上下功夫。”

问号继续深究:“即便如此,如果硬件不支持,并发式编程也未必能提高效率啊。比如在一台单处理器的主机上,多个线程只能是模拟的、逻辑上的并行,而非真正物理上的并行。”

“这话有一定道理。”冒号有限度地表示赞同,“但设计者应该未雨绸缪,总不能等到有了多处理器才想到并发式编程吧?再者,没有多处理器,是不是可以利用多台单处理器的主机同时运算呢?退一步讲,即使在一台单处理器的情况下,并发式编程同样可能提高性能。最典型的一个例子:当一个线程因为等待某种资源而被堵塞时,可以切换到其他线程而不至让CPU闲置。更重要的一点是,难道除了缩短程序运行时间外,并发式编程就没有别的好处吗?譬如打开一个网页,你是希望浏览器边下载边显示网页呢,还是下载完成后再显示?”

冒号课堂§2.4:并发范式(2)

时间:2011-06-25 BlogJava xyz98

“当然是边下载边显示啦。” 叹号毫不犹豫地说,“如果每个网页都是下载完成后再显示,那还不把人给憋坏了!”

逗号加了一句:“浏览器加载文字和加载图像也应分开在不同的线程,如果用户对文字部分不感兴趣,不等图像显示就可直接关闭网页了。”

“如果网页被提前关闭,那也是假用户之手变相缩短了程序运行时间。”冒号接过话来,“还有一个常见的例子,包括浏览器在内的许多应用软件在运行中都会显示一个进程条。该进程条的更新需要一个单独的线程,从效率上看它起的作用是负面

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号