Java-Android-jwebee
          Java-Android-jwebee
          對(duì)IT人來(lái)說,要成為一個(gè)優(yōu)秀的技術(shù)型管理者,除了需要具備扎實(shí)的技術(shù)基礎(chǔ)之外,還應(yīng)該培養(yǎng)良好的人際關(guān)系能力、談判與溝通技能、客戶關(guān)系與咨詢技能、商業(yè)頭腦和財(cái)務(wù)技能以及創(chuàng)新意識(shí),此外還要有巧妙的激勵(lì)技巧和化解沖突與解決突發(fā)問題的能力.

          作者 R.J. Lorimer譯者 韓鍇 發(fā)布于 2008年3月23日 下午10時(shí)6分

          社區(qū)
          Java
          主題
          編程,
          性能和擴(kuò)展性,
          JCP標(biāo)準(zhǔn)
          今天,處理器的內(nèi)核數(shù)量在不斷增加,以什么樣的方法開發(fā)程序才能發(fā)揮出新硬件的效能呢?這正變成一個(gè)愈發(fā)重要的問題擺在了開發(fā)者面前。IBM Developerworks已經(jīng)發(fā)布了一篇介紹Fork-Join并發(fā)類庫(kù)的連載文章,F(xiàn)ork-Join類庫(kù)會(huì)作為即將來(lái)到的Java 7的一部分進(jìn)行發(fā)布。InfoQ以前也報(bào)道過Java 7中最初的fork/join提案,其中還包含來(lái)自最初創(chuàng)建者Doug Lea的反饋。Doug Lea在他的論文“Fork/Join Parallelism in Java”中,首次把fork/join的概念引入到Java中。Doug Lea的util.concurrent包是JSR-166的基礎(chǔ),后者是發(fā)布在Java 5中的java.util.concurrentl類庫(kù)。Fork/Join是對(duì)JSR-166的簡(jiǎn)單修訂。

          連載文章的第一部分詳細(xì)介紹了fork-join類庫(kù)的核心概念,以及它要解決的問題:
          硬件的發(fā)展趨勢(shì)非常清晰;Moore定律表明不會(huì)出現(xiàn)更高的時(shí)鐘頻率,但是每個(gè)芯片上會(huì)集成更多的內(nèi)核。很容易想象讓十幾個(gè)處理器繁忙地處理一個(gè)粗粒度的任務(wù)邊界(比如一個(gè)用戶請(qǐng)求),但是這項(xiàng)技術(shù)不會(huì)擴(kuò)大到數(shù)千個(gè)處理器——在這種環(huán)境下短時(shí)間內(nèi)流量可能會(huì)呈指數(shù)級(jí)增長(zhǎng),但最終硬件趨勢(shì)將會(huì)占上風(fēng)。當(dāng)跨入多內(nèi)核時(shí)代時(shí),我們需要找到更細(xì)粒度的并行性,否則將面臨即便有許多工作需要去做而處理器卻仍處于空閑的風(fēng)險(xiǎn)。如果希望跟上技術(shù)發(fā)展的腳步,軟件平臺(tái)也必須配合主流硬件平臺(tái)的轉(zhuǎn)變。最終,Java 7將會(huì)包含一種框架,用于表示某種更細(xì)粒度級(jí)別的并行算法:fork-join框架。
          第二部分深入探討了在第一部分里定義的概念,涉及到分而治之(divide-and-conquer)的編程技術(shù):

          Fork-join融合了分而治之技術(shù);獲取問題后,遞歸地將它分成多個(gè)子問題,直到每個(gè)子問題都足夠小,以至于可以高效地串行地解決它們。遞歸的過程將會(huì)把問題分成兩個(gè)或者多個(gè)子問題,然后把這些問題放入隊(duì)列中等待處理(fork步驟),接下來(lái)等待所有子問題的結(jié)果(join步驟),把多個(gè)結(jié)果合并到一起。

          文章接下來(lái)展示了一個(gè)使用fork/join實(shí)現(xiàn)合并排序(merge-sort)算法的示例。

          這個(gè)連載系列的最后一部分介紹了ParallelArray類。ParallelArray是一個(gè)可用于fork/join算法的數(shù)據(jù)結(jié)構(gòu),它提供了一個(gè)通用目的API,以高度并發(fā)的方式執(zhí)行數(shù)據(jù)集的搜索、過濾和轉(zhuǎn)換。

          從事Java的BGGA閉包提案的團(tuán)隊(duì)已經(jīng)采納了fork-join框架與閉包協(xié)同工作。他們還在站點(diǎn)上提供了一個(gè)可以工作的實(shí)現(xiàn)。Developerworks上的那篇連載文章列舉了兩個(gè)使用ParallelArray類的例子,它們之間的區(qū)別在于是否使用了閉包:

          下面的例子是查找一組學(xué)生中最好的GPA,它用到了當(dāng)前Java 7的fork/join提案:

          ParallelArray students = new ParallelArray(fjPool, data);
          double bestGpa = students.withFilter(isSenior)
          .withMapping(selectGpa)
          .max();

          public class Student {
          String name;
          int graduationYear;
          double gpa;
          }

          static final Ops.Predicate isSenior = new Ops.Predicate() {
          public boolean op(Student s) {
          return s.graduationYear == Student.THIS_YEAR;
          }
          };

          static final Ops.ObjectToDouble selectGpa = new Ops.ObjectToDouble() {
          public double op(Student student) {
          return student.gpa;
          }
          };
          下面的例子與上面的相同,不過使用了BGGA閉包提案:
          double bestGpa = students.withFilter({Student s => (s.graduationYear == THIS_YEAR) })
          .withMapping({ Student s => s.gpa })
          .max();
          根據(jù)當(dāng)前的狀況估計(jì),Java 7會(huì)在2009年早期發(fā)布。

          查看英文鏈接:Parallelism with Fork/Join in Java 7


          jwebee

          我的個(gè)人網(wǎng)站
          posted on 2008-03-24 19:33 周行 閱讀(545) 評(píng)論(0)  編輯  收藏 所屬分類: IT技術(shù)
          Java-Android-jwebee
          主站蜘蛛池模板: 东丽区| 娄底市| 阿克陶县| 大安市| 郧西县| 冕宁县| 昭平县| 马山县| 大丰市| 峨边| 九龙坡区| 辽宁省| 蒙城县| 万源市| 安吉县| 长顺县| 海淀区| 菏泽市| 奉节县| 和顺县| 吉林省| 徐闻县| 临夏市| 收藏| 高密市| 思南县| 丹凤县| 达日县| 依兰县| 阳泉市| 阿拉善左旗| 小金县| 西乌| 萨迦县| 腾冲县| 清丰县| 亚东县| 韶关市| 泗洪县| 吴旗县| 宜丰县|