Welcome 微信登录

首页 / 软件开发 / JAVA / 冒号和他的学生们(连载8)——并发范式

冒号和他的学生们(连载8)——并发范式2011-06-29 BlogJava 郑晖并发范式

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

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

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

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

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

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

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

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

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

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

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

“由此可见,单凭并发式编程并不能保证提高效率,还必须在程序设计上作改进。”冒号说道,“并发式编程以进程为导向(Process-Oriented),以资源共享与竞争为主线——与当今世界形势何其相似乃尔!这意味着程序设计将围绕进程的划分与调度、进程之间的通讯与同步等等来展开。合理的进程设计应该能做到——”

软件易于重用、维护、测试

公平有效地利用资源,优化程序性能如增大吞吐量、减少响应时间、提高效率等

保障进程安全,防止竞态条件(Race Condition)

保持进程活性,避免死锁、饥饿、活锁、资源枯竭等

减少锁开销、上下文切换等带来的性能损失

妥善处理多进程在算法、调试等方面带来的复杂性

叹号蹙眉:“并发式编程好是好,就是太复杂。”