Herb Sutter的觀點(diǎn)

          Herb Sutter最近的一篇文章中如是說(shuō):“90年代,我們到處跟人叫講,什么是對(duì)象,什么是虛函數(shù),現(xiàn)在我們到處跟人說(shuō),什么是主動(dòng)對(duì)象,什么是Future”,他還說(shuō),結(jié)構(gòu)編程、面向?qū)ο螅F(xiàn)在該輪到并發(fā)和并行了。

          記得在去年,Herb Sutter就寫(xiě)文章預(yù)示并發(fā)時(shí)代的到來(lái),主要是因?yàn)镃PU的主頻將不再會(huì)有以前那樣的增長(zhǎng)速度,而將迎來(lái)多核時(shí)代。程序?qū)⑹强坎l(fā)來(lái)提高運(yùn)行效率。



          JDK 1.5 Concurrent包

          在傳統(tǒng)的多線程程序中,經(jīng)常會(huì)有:
          創(chuàng)建線程
          wait\notify
          重新發(fā)明輪子,例如BlockingQueue、Lock、Semaphore這樣的基本工具類(lèi)。

          不恰當(dāng)?shù)某橄螅瑫?huì)導(dǎo)致難以承受的復(fù)雜度,代碼錯(cuò)誤多,常犯死鎖、lost notify之類(lèi),也很容易導(dǎo)致性能低下。我也有過(guò)這樣的經(jīng)歷,失敗的教訓(xùn)刻骨銘心。

          JDK 1.5 util.concurrent包提供了一系列工具類(lèi),其中一些類(lèi)的使用,代表一些觀念的轉(zhuǎn)變,更好的抽象,優(yōu)雅的設(shè)計(jì)模式,會(huì)使多線程程序具有良好的結(jié)構(gòu)。

          使 用Excector、ScheduleExecutorService、Future、BlockingQueue等類(lèi)搭建起來(lái)的程序,會(huì)使得多線程程序 有很清晰明了的結(jié)構(gòu)。其中的差別,似乎就象以前“非結(jié)構(gòu)化程序設(shè)計(jì)”到“結(jié)構(gòu)化程序設(shè)計(jì)”那樣的轉(zhuǎn)變,現(xiàn)在我們使用Future等設(shè)計(jì)模式,起到了同樣好 的效果。

          結(jié)構(gòu)化程序設(shè)計(jì),使用if/else、while、do...while、for、switch等結(jié)構(gòu),把程序組織的清晰易懂,更容易掌握,更少出錯(cuò)。
          Executor、Future、Concurrent Collection等工具類(lèi)、模式,使得并發(fā)程序結(jié)構(gòu)清晰化/模式化,更容易掌握,更少出錯(cuò),也更高效。

          隨著多核CPU的普及,摩爾定律逐步失效,并發(fā)程序設(shè)計(jì)將會(huì)是程序員要求掌握的基本技巧,就如同現(xiàn)在程序員要求掌握面向?qū)ο笠粯印?br>
          有幾個(gè)文檔值得一看的:

          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

          上面的文檔只能給你一個(gè)介紹,最好的辦法還是通讀一遍JDK 1.5 utilconcurrent包的源碼,然后在實(shí)踐中,改變觀念,積累經(jīng)驗(yàn)。


          并發(fā)和網(wǎng)絡(luò)編程

          網(wǎng) 絡(luò)中,存在中心服務(wù)器,不同機(jī)器的交互,并發(fā)和異步是常見(jiàn)行為。網(wǎng)絡(luò)中的服務(wù)器,需要相應(yīng)大量的并發(fā),這種并發(fā)通常會(huì)是極端的并發(fā),操作系統(tǒng)提供一些特別 的API,例如select模型,poll,windows的完成端口等等。JDK在1.4之后支持nio,主要也是針對(duì)大并發(fā)的支持。

          C++的框架ACE,提供了跨平臺(tái)的線程、進(jìn)程、Future等API,并且提供了Reactor、Proactor等框架,使得能夠容易編寫(xiě)跨平臺(tái)的并發(fā)網(wǎng)絡(luò)服務(wù)器。

          ACE框架的一個(gè)思想就是,使用ACE和模式消除復(fù)雜性。這一點(diǎn)和JDK 1.5 concurrent包提供的高級(jí)設(shè)計(jì)模式類(lèi)的意圖是一致的。

          在《C++網(wǎng)絡(luò)編程》卷1和卷2中講述了一些模式,例如Half Sync/Aysnc vs Leader/Follow模式。這是ACE開(kāi)發(fā)過(guò)程中的一些研究成果,我們查找ACE相關(guān)資料時(shí),會(huì)發(fā)現(xiàn)一些關(guān)于并發(fā)方面的論文。ACE也提供了Future。

          我才運(yùn)用ACE作了一些簡(jiǎn)單的應(yīng)用,了解還不夠深入,不過(guò)覺(jué)得JDK concurrent包在并發(fā)設(shè)計(jì)模式方面,比ACE走到更遠(yuǎn)。


          今天,你使用Future了嗎?






          溫少 2006-11-10 03:23 發(fā)表評(píng)論


          文章來(lái)源:http://www.cnblogs.com/jobs/archive/2006/11/10/556063.html
          posted on 2006-11-20 02:08 溫少的日志 閱讀(487) 評(píng)論(1)  編輯  收藏
          Comments

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


          網(wǎng)站導(dǎo)航:
           
           
          主站蜘蛛池模板: 张北县| 东方市| 白河县| 嘉兴市| 彩票| 家居| 桂东县| 金平| 东安县| 石阡县| 汕头市| 江油市| 洪江市| 克山县| 连城县| 夏邑县| 尖扎县| 永顺县| 休宁县| 西乡县| 茶陵县| 阳信县| 栾城县| 潍坊市| 偏关县| 翁源县| 温州市| 沿河| 泸水县| 同江市| 潮州市| 苗栗市| 昌乐县| 岳阳市| 杂多县| 屏东市| 德令哈市| 阿荣旗| 元江| 泊头市| 中卫市|