作为最主流的编程语言之一,Java的开发团队不可能不了解多核芯片革命的重要性,因此他们正在努力工作,针对新的多核处理器可能带来的性能特性提供新的并行框架。现在我们知道,JDK 7(Java Development Kit,Java开发工具包)将提供新的fork-join框架,以帮助Java开发者能够继续使用Java在多核战争中赢取他们的阵地。
我想,如果在这里引用一下达尔文的“物种起源”和他在进化论中的观点再合适不过了:“真实的情况是,大自然选择了最适合的品种,优胜劣汰,适者生存,这一过程被称为物竞天择。”
我敢肯定,为了在并行化的年代生存,开发者一定会选择最适合多核开发的编程语言,这一过程也该被称为物竞天择。不能够自我发展以支持多核编程的开发语言将是不会有机会生存在这个新时代的。幸运的是,我们看到JDK 7已针对并行化提供了诸多改进,它能够诱惑足够的多核程序员成为它的拥趸。
Java从第一个版本开始就支持多线程。然而,在Java诞生时,多核处理器还远远没有问世。因此,旧的Java线程模型并没有在这方面做过多考虑。旧模式在只有一个处理核心时能够创建响应性更强的应用,表现可以说非常优秀,但它确实没有为高并发级别做好准备。如今的多核心编程需要许多并行任务共同运行,充分利用所有可用的核心,而在这种情况下旧模式显然已经落后了。
为此,JDK 5中加入了对粗颗粒并发的框架支持,使新模式能够适合于多处理器系统。而JDK 7中将进一步添加对细颗粒并行的支持,使用新的fork-join框架,给开发者提供了深入多核微处理器的可能性。
可以肯定地说,在多核革命中,Java将不断的进化以谋求生存。新的框架提供了根据任务工作的可能性,而并不需使用过多的线程。例如,在新提供的java.util.concurrent.forkjoin包中,JDK 7将提供以下有用的基类:
◆RecursiveAction:代表divide-and-conquer解决方法类
◆RecursiveTask:代表result-bearing任务
◆AsyncAction:与需要异步完成的任务协同工作
◆CyclicAction:与并行迭代任务协同工作
新的fork-join任务的设计目的为将工作量最小化,并提高计算密集型任务的性能。此外,比起旧版的线程编码,代码更加容易理解,开发者需要的同步时间会更少。
对于在多核CPU上运行的计算密集型任务,新的fork-join框架将会非常有用。
JDK 7还将提供许多其他功能,比如新的ParallelArray类等(请参考:Java 7新特性展望)。然而,我还是更想把重点放在新的fork-join框架上。
Java正在不断进化中,因此,作为Java开发者也必须不断的提高自己,充分利用这些即将到来的功能。