首页 / 软件开发 / JAVA / 冒号和他的学生们(连载8)——并发范式
冒号和他的学生们(连载8)——并发范式2011-06-29 BlogJava 郑晖并发范式在合作中竞争,在竞争中合作 ——《竞合》逗号好奇地问:“还有其他类型的编程范式吗?”“不但有,而且有很多。”冒号喝了一口水,悠悠地说,“并发式编程就是其中之一。”叹号有些惊讶:“并发式编程也算一种范式?它似乎更像是提供运行效率的一种手段。”“大谬不然。”冒号摇摇头,“真正的并发式编程,绝不只是调用线程API或使用synchronized、lock之类的关键字那么简单。从宏观的架构设计,到微观的数据结构、流程控制乃至算法,相比通常的串行式编程都可能发生变化。随着硬件性能和用户需求的双重提升,并发式编程已成为不可回避的主题。毫不夸张地说,并发式编程是继OOP之后又一场思想和技术上的革命。只是相比OOP,尽管年龄相仿,但语言上不够支持,标准上不够统一,理论上不够完善,因而这场革命更具破坏性和建设性。现在我们来看一个例子,比较两种烧水泡茶的方案。”说着冒号在黑板上写下——方案一:洗茶杯;放茶叶;灌水壶;烧水;水开后泡茶。方案二:灌水壶;在烧水的同时,洗茶杯;放茶叶;水开后泡茶。引号见多识广:“我记得这好像是运筹学中的例子,显然方案二更佳。从编程的角度来看,方案一是串行式编程,方案二是并发式编程——烧水的线程与洗茶杯放茶叶的线程是同时进行的。”“如果方案一也用并发式编程呢?”冒号追问。引号一愣,随即道:“必须先洗茶杯后放茶叶,洗茶杯放茶叶的同时也没法烧水,至于泡茶,更得等水开之后了。”“由此可见,单凭并发式编程并不能保证提高效率,还必须在程序设计上作改进。”冒号说道,“并发式编程以进程为导向(Process-Oriented),以资源共享与竞争为主线——与当今世界形势何其相似乃尔!这意味着程序设计将围绕进程的划分与调度、进程之间的通讯与同步等等来展开。合理的进程设计应该能做到——”软件易于重用、维护、测试公平有效地利用资源,优化程序性能如增大吞吐量、减少响应时间、提高效率等保障进程安全,防止竞态条件(Race Condition)保持进程活性,避免死锁、饥饿、活锁、资源枯竭等减少锁开销、上下文切换等带来的性能损失妥善处理多进程在算法、调试等方面带来的复杂性叹号蹙眉:“并发式编程好是好,就是太复杂。”