1.2.4 设计方法
通常情况下,程序员会先对问题所在的问题域进行甄别,然后在据此对代码进行并行化处理,以改善性能,这样一来,下一次再遇到类似瓶颈时就可以重用这个解决方案了。特别是当我们需要对一系列现存的串行程序进行并行化处理时,这种思路非常吸引人。然而,尽管这样做或许确实能让程序的性能获得初步的提升,但正如之前所描述的那样,这里隐藏着许多陷阱。因此,传统的分析、优化技术或许并不是最好的选择。而另一个更好的选择是:在充分理解具体问题或程序的基础上,发掘贯穿整个应用程序的潜在并行化需求。这个过程将会引导你去选择不同的架构或算法,以便更好地拓展程序在并行化方面的潜力。千万不要草率地界定性能瓶颈并贸然使其并行化,恰恰相反,我们应该通过改变程序的结构来并行化。
在通盘考虑数据结构和算法之前,不要急着界定问题的瓶颈所在。
分解、协调以及可扩展性共享技术之间是密切相关的,甚至是环环相扣的。因此,当我们在为特定的应用程序选择设计方案的时候,应该进行全方位的思考。
请尽量使用设计模式。
读完上面这些描述,你或许会觉得这太过形而上学,泛泛而谈了。究竟如何将问题分解成任务?到底该采用哪种协调技术,有更具体一点的回答吗?
答案是肯定的,这本书中所描述的设计模式就是最好的回答。它们就是解决这些问题真正的捷径。一旦你领会了这些设计模式幕后的设计动机,就会自然而然地培养出某种直觉,而这种直觉将会帮助你将这些设计模式及其变体应用到自己的程序中。接下来,我们将会在剩下的章节中详细地介绍这些模式,以供参考。