冒号课堂§2.4:并发范式 - 编程入门网
冒号课堂§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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |