多核平行計算時代的來臨
全世界程式設計師最大短處就是缺乏平行計算經驗
當CPU進入雙核多核,軟體架構進入分散式計算 雲端計算時代後,他們的共同點平行計算已經成為一個新的熱點。
前段時間Ruby On Rails JRuby Grails等新式語言有些熱門,但是平行計算卻是它們的殺手,新的平行計算DSL(Domain-specific language)語言 Scala Clojure 以及Erlang在這幾個月已經成為新的明星。
Scala是一個相容JVM的並行語言,後臺有IBM等大公司支援,而Erlang是最早由愛立信推出的一個開源語言,目前尷尬是缺乏象IBM這樣軟體巨頭支援。2009將有各種有關Clojure語言的介紹。
在這樣的背景下,有人就提出:Java是否已經發展到頂了,可能走下坡路了呢?(Dead like COBOL )
最近Yahoo網格雲端計算小組釋出一項驚人效能測試結果:
Java開源Apache Hadoop贏得了TB級別的最快基準測試,Hadoop可以在209秒內完成1 TB資料排序,打破了前期297秒的年度記錄(Daytona),成為最快紀錄冠軍,這是一項1998由Jim Gray建立的基準測試,指定輸入資料( 100億個100位元組的記錄) ,徹底地排序,並寫入磁碟。
Java取得這項測試的勝利,並不是因為Java語言走上了並行語言,而是Java從誕生那天起,就是為網路而生,它是透過多臺伺服器平行計算取得了這項驕人的成績,還是那句話:Java在個體上可能拼不過你,但是整合群了就能戰勝你,就象螞蟻個體雖小,但是大量成批螞蟻也是任何生物的殺手。
Java語言因為其高瞻遠矚的前瞻性取得了生命延續,但是這並意味著其停滯不前,如今單臺伺服器進入CPU時代,如何在單臺PC的微結構中象Scala那樣提高多核併發計算效能,將是Java 7推出的新特點。
但是,這並不像以前推出的一些新功能特點,平行計算需要程式設計師思維方式的改變。其實,從jdon.com討論來看:程式設計師相當缺乏並行開發思維,從以往不習慣執行緒併發 到面對EJB這樣分散式元件開發的抓狂,都說明一些人的思維升級換代已經跟不上CPU了(最後機器人會戰勝一部分人 悲哀)。
Java執行緒模型提供了開發者很方便的併發開發,並發展到javaEE的Web,使用Jsp/Serlvet封裝多執行緒,避免一般軟體開發者涉及過於複雜的執行緒程式設計,當我們開發一個Web應用時,部署到Tomcat/Jetty/JBoss伺服器上,如果某個時刻有多個使用者同時對這個Web應用發出請求,那麼伺服器將分派多個執行緒分別接受處理這些併發請求。這實際上已經是一個多使用者併發系統,但是CPU處理併發請求任務時,由於是一個CPU,因此實際上核心是順序執行的,現在兩個CPU多核機器已經開始普遍,如何發揮多核CPU的平行計算模式呢?
這就要對以往計算模式進行顛覆性的修改,平行計算(parallel computation)這個概念的意思應該這樣定義:在單臺PC機中可以跨多核CPU執行,部署到多臺PC機中,能夠跨越多臺伺服器雲端計算。這樣的伸縮性非常類似無所不能的孫悟空了,這樣的平行計算模式才是真正可伸縮的Scalable!
而目前唯有Java最有希望做到這點,Java只要補上微結構多核並行執行這一課,而Scala Clojure 以及Erlang要補叢集 雲端計算這一課,這也是Scala非常靠近Java一個原因。
偉大平行計算專家Doug Lea的 Java fork/join framework為java這趟補課提供了及時雨,下面這段程式碼展示java平行計算方式:
import jsr166y.forkjoin.*; class Fib extends RecursiveTask<Integer> { static final int threshold = 10; volatile int number; Fib(int n) { number = n; } public Integer compute () { int n = number; if (n <= threshold) return sequentialFib(n); else { Fib f1 = new Fib(n - 1); f1.fork(); Fib f2 = new Fib(n - 2); return f2.forkJoin() + f1.join(); } } public static void main(String[] args) { try { int groupSize = 2; // number of CPUs ForkJoinPool group = new ForkJoinPool(groupSize); Fib f = new Fib(40); Integer result =group.invoke(f); System.out.println(“Fibonacci Number: “ + result); } catch (Exception ex) {} } int sequentialFib(int n) { if (n <= 1) return n; else return sequentialFib(n-1) + sequentialFib(n-2); } } <p class="indent"> |
fork/join framework將被整合進入JDK 7版本。
當然,新的語言有更方便簡潔的實現,Scala 或 Clojure也許成為替代ROR/Groovy的明日之星,
或者這兩個語言有各自的細分市場。在未來某個時刻,也許應該死亡的是PHP/ROR。
多核時代開啟了軟體程式設計新時代,我們面臨更多挑戰和創新,好的工具和平臺可以幫助我們更好地進入新時代。
參考文章:
Is Scala or Clojure poised for stardom?
http://www.nofluffjuststuff.com/blog/andrew_glover/2008/10/is_scala_or_clojure_poised_for_stardom_.html
Guest View: Java + multicore = good news
http://www.sdtimes.com/link/32943
[該貼被banq於2008-11-13 10:08修改過]
[該貼被banq於2008-11-13 10:09修改過]
[該貼被banq於2008-11-13 10:11修改過]
相關文章
- 黃仁勳:序列計算過時平行計算是未來
- 平行計算π值
- Oracle平行計算Oracle
- 平行計算cuda
- 全新智慧時代的來臨
- GPU:平行計算利器GPU
- NoSQL時代終將來臨?SQL
- Java通過Fork/Join來優化平行計算Java優化
- 淺談.NET下的多執行緒和平行計算(十四)平行計算前言執行緒
- 後REST時代正在來臨REST
- 大資料時代來臨大資料
- 全HTTPS時代來臨?HTTP
- Rpc 的時代要來臨了RPC
- 國慶新聞回顧:雲端計算頻遭指責 萬兆時代來臨薦
- 瞭解Flow -- elixir的平行計算庫
- 引文——平行計算的學習之殤
- 平行計算與Neon簡介
- java8平行計算Java
- 後端請求中的非同步計算與平行計算後端非同步
- 雲端計算分散式平行計算:系統架構分散式架構
- JDK7的平行計算功能升級JDK
- 大文字平行計算實現方式
- OpenCV使用ParallelLoopBody進行平行計算OpenCVParallelOOP
- springboot~CompletableFuture平行計算Spring Boot
- 資料新時代已經來臨
- 為什麼說UX設計師的黃金時代已來臨?UX
- 完數的OpenMP並行程式設計-平行計算並行行程程式設計
- 完數的MPI並行程式設計-平行計算並行行程程式設計
- PostgreSQL11preview-ParallelAppend(多表平行計算)sharding架構平行計算核心功能之一SQLViewParallelAPP架構
- [索引]Oracle RAC資料庫平行計算的使用索引Oracle資料庫
- 請問,平行計算和資料庫資料庫
- BIG DATA 大資料時代來臨大資料
- 第二篇:從 GPU 的角度理解平行計算GPU
- Linux叢集的安裝與平行計算(轉)Linux
- IP時代來臨,電競酒店如何借好遊戲的“東風”?遊戲
- 傳真智慧化時代的來臨令業務更高效
- [930]python平行計算框架pathos模組Python框架
- 【1】Embarrassingly Parallel(易平行計算問題)Parallel