china-pub購書網(wǎng)址:http://www.china-pub.com/computers/common/info.asp?id=34017

          1、總體感受
          a) 這本書主要介紹的是intel平臺下的多核程序設(shè)計技術(shù),Windows介紹較多,Linux介紹較少,Java更少。作者是Intel公司的平臺架構(gòu)師,我們知道wintel聯(lián)盟,書中的內(nèi)容如此分布也是正常。
          b) 此書讓我懂得了很多硬件方面的并行知識。
          c) 此書介紹Windows API中和并發(fā)相關(guān)的部分,很詳盡,比Jeffrey Richter的《Windows核心編成》有深度多了,也精辟多了。顯然《多核程序設(shè)計》作者屬于有經(jīng)驗的工程師,Jeffrey Richter只是一個寫手,兩者沒有可比性。不過這方面的知識偶早已涉獵,當作復(fù)習一遍罷了。
          d) 此書偏向底層,硬件和操作系統(tǒng)層面。更高層面的技術(shù)介紹較少。
          e) 第一次了解OpenMP技術(shù)的一些細節(jié)。以前只聽說,也沒查過任何相關(guān)資料,在此書中看到了相關(guān)部分,挺有意思的,感覺那些語法很有趣。Herb Sutter也是要在語法方面動手。反正我在有了一個粗淺認識之后,覺得很有意思。

          -------------------------

          2、并發(fā)流程控制
          Fence
          在Java 中對應(yīng)的是java.util.concurrent.CountDownLatch。最初接觸CountDownLatch的時候,由于其實現(xiàn)很簡單, 當時覺得是一個可有可無的工具類。但后來在不同的場景多次使用,發(fā)現(xiàn)很有用。在此書中再次發(fā)現(xiàn)類似的Fence,用于在共享存儲多處理器或者多核環(huán)境中, 確保存儲操作的一致性。我猜這屬于業(yè)界并發(fā)流控制的典型手段了。


          Barrier
          在Java中對應(yīng)的是java.util.concurrent.CyclicBarrier。在應(yīng)用程序中,一個場景就是和定時器結(jié)合使用,countDown、await、reset,做定時定量批量處理。
          我猜這也屬于業(yè)界并發(fā)流程控制的典型手段了。

          (CountDownLatch和CycliBarrier的實現(xiàn)代碼都很簡單,但很有用,他們都屬于并發(fā)流程控制的典型手段)

          -------------------------

          3、非阻塞算法
          InterLocked在Java中對應(yīng)的是java.util.concurrent.atomic.xxx
          書中提到了cache行乒乓球現(xiàn)象導(dǎo)致的性能問題,提高了非阻塞算法的復(fù)雜性問題。

          關(guān)于性能問題,developerworks上有一片文章,有測試數(shù)據(jù):
          《Java 理論與實踐: 流行的原子》 (http://www.ibm.com/developerworks/cn/java/j-jtp11234/index.html)
          文章中的測試數(shù)據(jù)表明,直接使用atomic在1個和2個處理器時是最好的,4個處理器以上,使用java.util.concurrent.locks.ReentrantLock性能更好。

          java.util.concurrent包,提供了很多高級的概念,隱藏了非阻塞算法帶來的復(fù)雜度,其底層框架達到了最佳性能。

          -------------------------

          4、任務(wù)分解、數(shù)據(jù)分解以及數(shù)據(jù)流分解
          此書中明確提出了這三個概念,很有用,讓我在這方面的知識概念清晰化了。

          任務(wù)分解
          Java 中的Executor,提供了任務(wù)分解的手段和模式。任務(wù)分解提交給Executor執(zhí)行。java.util.concurrent中提供了 Future,用于任務(wù)提交者和Executor之間的協(xié)調(diào)。Future是一種很好的手段,在很多涉及并發(fā)的庫都提供。例如C++網(wǎng)絡(luò)并發(fā)庫中提供了 Future,Herb Sutter要在Visual C++中引入Future。

          數(shù)據(jù)分解
          數(shù)據(jù)分解的手段很多也很常見。 Java中,提供了一種高級的數(shù)據(jù)分解協(xié)同模式j(luò)ava.util.concurrent.Exchanger這個類。早在Java SE 5.0時,Exchanger只支持2Parties,Java SE 6.0支持n parties。偶想象過一些很酷的應(yīng)用場景,寫過模擬測試,但一直沒有機會用于實際開發(fā)中。

          數(shù)據(jù)流分解
          書中提到了眾多周知的producer/consumer問題。
          其實java.util.concurrent.Exchanger類,既有數(shù)據(jù)分解,又有數(shù)據(jù)流分解,exchanger中的producer和consumer的角色會互換的,很有意思。

          -------------------------

          5、作為Java程序員的思考
          Java SE 5.0之后,提供了util.concurrent包,功能齊全,性能卓越,非常優(yōu)秀。從此書來看,業(yè)界流行的流程控制手段和并發(fā)程序設(shè)計方法一個不落。我們應(yīng)該感謝偉大的Doug Lea,他為我們帶了一個如此完美的并發(fā)庫!
          posted on 2007-04-26 07:08 溫少的日志 閱讀(3294) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
           
          主站蜘蛛池模板: 兴仁县| 石河子市| 肥东县| 治多县| 汽车| 高州市| 武强县| 建水县| 孟连| 乡宁县| 绍兴市| 蚌埠市| 赣州市| 丰顺县| 西林县| 建阳市| 兴和县| 大丰市| 东光县| 无极县| 铜川市| 南乐县| 馆陶县| 汶川县| 红安县| 虎林市| 芷江| 聊城市| 平遥县| 沾化县| 平山县| 桐庐县| 康定县| 澎湖县| 太康县| 普兰县| 彰化市| 巩留县| 墨玉县| 明水县| 含山县|