Herb Sutter的觀點

          Herb Sutter最近的一篇文章中如是說:“90年代,我們到處跟人叫講,什么是對象,什么是虛函數,現在我們到處跟人說,什么是主動對象,什么是Future”,他還說,結構編程、面向對象,現在該輪到并發和并行了。

          記得在去年,Herb Sutter就寫文章預示并發時代的到來,主要是因為CPU的主頻將不再會有以前那樣的增長速度,而將迎來多核時代。程序將是靠并發來提高運行效率。



          JDK 1.5 Concurrent包

          在傳統的多線程程序中,經常會有:
          創建線程
          wait\notify
          重新發明輪子,例如BlockingQueue、Lock、Semaphore這樣的基本工具類。

          不恰當的抽象,會導致難以承受的復雜度,代碼錯誤多,常犯死鎖、lost notify之類,也很容易導致性能低下。我也有過這樣的經歷,失敗的教訓刻骨銘心。

          JDK 1.5 util.concurrent包提供了一系列工具類,其中一些類的使用,代表一些觀念的轉變,更好的抽象,優雅的設計模式,會使多線程程序具有良好的結構。

          使 用Excector、ScheduleExecutorService、Future、BlockingQueue等類搭建起來的程序,會使得多線程程序 有很清晰明了的結構。其中的差別,似乎就象以前“非結構化程序設計”到“結構化程序設計”那樣的轉變,現在我們使用Future等設計模式,起到了同樣好 的效果。

          結構化程序設計,使用if/else、while、do...while、for、switch等結構,把程序組織的清晰易懂,更容易掌握,更少出錯。
          Executor、Future、Concurrent Collection等工具類、模式,使得并發程序結構清晰化/模式化,更容易掌握,更少出錯,也更高效。

          隨著多核CPU的普及,摩爾定律逐步失效,并發程序設計將會是程序員要求掌握的基本技巧,就如同現在程序員要求掌握面向對象一樣。

          有幾個文檔值得一看的:

          javaone的幻燈片
          http://developers.sun.com/learning/javaoneonline/2005/coreplatform/TS-3423.pdf
          http://developers.sun.com/learning/javaoneonline/2005/coreplatform/TS-5807.pdf

          Doug Lea的文章
          http://gee.cs.oswego.edu/dl/papers/aqs.pdf

          上面的文檔只能給你一個介紹,最好的辦法還是通讀一遍JDK 1.5 utilconcurrent包的源碼,然后在實踐中,改變觀念,積累經驗。


          并發和網絡編程

          網 絡中,存在中心服務器,不同機器的交互,并發和異步是常見行為。網絡中的服務器,需要相應大量的并發,這種并發通常會是極端的并發,操作系統提供一些特別 的API,例如select模型,poll,windows的完成端口等等。JDK在1.4之后支持nio,主要也是針對大并發的支持。

          C++的框架ACE,提供了跨平臺的線程、進程、Future等API,并且提供了Reactor、Proactor等框架,使得能夠容易編寫跨平臺的并發網絡服務器。

          ACE框架的一個思想就是,使用ACE和模式消除復雜性。這一點和JDK 1.5 concurrent包提供的高級設計模式類的意圖是一致的。

          在《C++網絡編程》卷1和卷2中講述了一些模式,例如Half Sync/Aysnc vs Leader/Follow模式。這是ACE開發過程中的一些研究成果,我們查找ACE相關資料時,會發現一些關于并發方面的論文。ACE也提供了Future。

          我才運用ACE作了一些簡單的應用,了解還不夠深入,不過覺得JDK concurrent包在并發設計模式方面,比ACE走到更遠。


          今天,你使用Future了嗎?






          溫少 2006-11-10 03:23 發表評論


          文章來源:http://www.cnblogs.com/jobs/archive/2006/11/10/556063.html
          posted on 2006-11-20 02:08 溫少的日志 閱讀(487) 評論(1)  編輯  收藏
          Comments
          • # re: [導入]關于并發程序設計 (一)
            天天看海
            Posted @ 2007-08-17 13:55
            喜歡研究JAVA多線程的朋友可以加入QQ群34237757  回復  更多評論   

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


          網站導航:
           
           
          主站蜘蛛池模板: 皮山县| 如东县| 闽侯县| 织金县| 昌邑市| 梅州市| 平利县| 邯郸县| 阿荣旗| 固安县| 三河市| 大洼县| 正定县| 措美县| 华蓥市| 临朐县| 东丰县| 保山市| 全椒县| 沙河市| 阳春市| 金湖县| 汉沽区| 团风县| 清流县| 大关县| 辽中县| 沐川县| 综艺| 新密市| 宁陕县| 河曲县| 广德县| 色达县| 东丽区| 收藏| 灵寿县| 万荣县| 离岛区| 巴彦淖尔市| 兰溪市|