4月17日外電頭條:Java 7將向細(xì)顆粒并行化發(fā)展
原創(chuàng)【51CTO.com快譯】作為最主流的編程語(yǔ)言之一,Java的開(kāi)發(fā)團(tuán)隊(duì)不可能不了解多核芯片革命的重要性,因此他們正在努力工作,針對(duì)新的多核處理器可能帶來(lái)的性能特性提供新的并行框架?,F(xiàn)在我們知道,JDK 7(Java Development Kit,Java開(kāi)發(fā)工具包)將提供新的fork-join框架,以幫助Java開(kāi)發(fā)者能夠繼續(xù)使用Java在多核戰(zhàn)爭(zhēng)中贏取他們的陣地。
我想,如果在這里引用一下達(dá)爾文的“物種起源”和他在進(jìn)化論中的觀點(diǎn)再合適不過(guò)了:“真實(shí)的情況是,大自然選擇了最適合的品種,優(yōu)勝劣汰,適者生存,這一過(guò)程被稱(chēng)為物競(jìng)天擇?!?/P>
我敢肯定,為了在并行化的年代生存,開(kāi)發(fā)者一定會(huì)選擇最適合多核開(kāi)發(fā)的編程語(yǔ)言,這一過(guò)程也該被稱(chēng)為物競(jìng)天擇。不能夠自我發(fā)展以支持多核編程的開(kāi)發(fā)語(yǔ)言將是不會(huì)有機(jī)會(huì)生存在這個(gè)新時(shí)代的。幸運(yùn)的是,我們看到JDK 7已針對(duì)并行化提供了諸多改進(jìn),它能夠誘惑足夠的多核程序員成為它的擁躉。
Java從第一個(gè)版本開(kāi)始就支持多線(xiàn)程。然而,在Java誕生時(shí),多核處理器還遠(yuǎn)遠(yuǎn)沒(méi)有問(wèn)世。因此,舊的Java線(xiàn)程模型并沒(méi)有在這方面做過(guò)多考慮。舊模式在只有一個(gè)處理核心時(shí)能夠創(chuàng)建響應(yīng)性更強(qiáng)的應(yīng)用,表現(xiàn)可以說(shuō)非常優(yōu)秀,但它確實(shí)沒(méi)有為高并發(fā)級(jí)別做好準(zhǔn)備。如今的多核心編程需要許多并行任務(wù)共同運(yùn)行,充分利用所有可用的核心,而在這種情況下舊模式顯然已經(jīng)落后了。
為此,JDK 5中加入了對(duì)粗顆粒并發(fā)的框架支持,使新模式能夠適合于多處理器系統(tǒng)。而JDK 7中將進(jìn)一步添加對(duì)細(xì)顆粒并行的支持,使用新的fork-join框架,給開(kāi)發(fā)者提供了深入多核微處理器的可能性。
可以肯定地說(shuō),在多核革命中,Java將不斷的進(jìn)化以謀求生存。新的框架提供了根據(jù)任務(wù)工作的可能性,而并不需使用過(guò)多的線(xiàn)程。例如,在新提供的java.util.concurrent.forkjoin包中,JDK 7將提供以下有用的基類(lèi):
◆RecursiveAction:代表divide-and-conquer解決方法類(lèi)
◆RecursiveTask:代表result-bearing任務(wù)
◆AsyncAction:與需要異步完成的任務(wù)協(xié)同工作
◆CyclicAction:與并行迭代任務(wù)協(xié)同工作
新的fork-join任務(wù)的設(shè)計(jì)目的為將工作量最小化,并提高計(jì)算密集型任務(wù)的性能。此外,比起舊版的線(xiàn)程編碼,代碼更加容易理解,開(kāi)發(fā)者需要的同步時(shí)間會(huì)更少。
對(duì)于在多核CPU上運(yùn)行的計(jì)算密集型任務(wù),新的fork-join框架將會(huì)非常有用。
JDK 7還將提供許多其他功能,比如新的ParallelArray類(lèi)等(請(qǐng)參考:Java 7新特性展望)。然而,我還是更想把重點(diǎn)放在新的fork-join框架上。
Java正在不斷進(jìn)化中,因此,作為Java開(kāi)發(fā)者也必須不斷的提高自己,充分利用這些即將到來(lái)的功能。
【51CTO.com譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】
原文:Java 7 will evolve to fine-grained parallelism 作者:Gaston Hillar
【編輯推薦】