您的位置:首页 > 编程语言 > Java开发

(轉貼) 千頭萬緒 : 學習多執行緒程式設計的好書 (.NET) (Java)

2007-04-25 16:04 369 查看
轉貼自千頭萬緒 : 學習多執行緒程式設計的好書

找對書,多執行緒不再避之唯恐不及
科學家對於人類大腦的運作方式,目前仍存在許多爭議。但是許多經過科學實驗的證據顯示,人類的大腦是以平行的方式工作。即使如此,筆者不免想起,大學時期選修作業系統(Operation System)這門課時,當老師教到Task、Process、以及Thread,一群大學生才剛搞懂哲學家的吃飯問題,緊接著關於Thread的演算法討論,搞得同學們一陣千頭萬緒,紛紛中箭倒地。

從此,計算機相關科系的畢業生,避多執行緒唯恐不及,能夠不用就不用,就算不得已一定要多執行緒一番,也不見得可以撰寫出真正發揮出多執行緒優勢的程式,大部分所見到的,都是存在著隱憂的程式碼。

Win32多執行緒應用程式開發
過去,Win32應用程式當道的時候,要學習如何使用Win32 API所提供的多緒執行功能,Addison Wesley的《Multithreading Applications in Win32:The Complete Guide to Threads》這本書絕對是眾多Windows程式設計專家推薦的好書,這本書在1997年8月的時候,曾經由侯俊傑(侯捷)老師翻譯,碁峰出版《Win32 多緒程式設計》,以侯老師在寫譯上的高品質要求,這本書自然是當時國內Windows程式設計師手頭上必備的一本書。

8年過去了,現在的系統開發主流是Web應用程式,不再是Windows應用程式,這本書也絕版了,但是其參考性,並沒有因此而降低,如果您的工作還是需要在Win32平臺上開發多執行緒應用程式,想盡辦法也該試著把這本書找出來吧。

Unix多執行緒應用程式開發
相較於Win32平臺,Unix為另外一個作業系統的主流,Unix伺服器通常肩負著關鍵性任務,尤其在這個Internet的時代,躲在背後苦命工作的伺服器,十之八九採用Unix。即使伺服器等級的機器有再多的處理器和記憶體,仍然需要善用多執行緒的伺服器軟體,才能充分發揮其效用。因此,在Unix上開發多執行緒軟體,同樣是個重要議題。

然而,Unix只是一個統稱,其分支體系之複雜,非專家無法區分出Linux、FreeBSD、Solaris、Mac OS X這些作業系統之間的親戚關係。要在這些”類UNIX”的平臺上開發一個可以跨平臺的應用程式,絕對是一件非常困難且精細的事情,所以制定了POSIX Thread(簡稱PThread)標準,藉此降低工程師的負擔,Addison Wesley《Programming with POSIX Threads》這本書,也成為Unix上撰寫多執行緒程式的必備參考書。

除此之外,O’Reilly的《Pthreads Programming》也是另外一本不錯的參考書,這本書也曾在1997年11月,由一家早已不存在的『松格資訊』出版過中譯本。現在如果有人想要買一本來保存,可能真的得到光華商場的地下一樓,中古書店一間間慢慢地找,才有可能找得到。

雖然《Pthreads Programming》的評價沒有《Programming with POSIX Threads》來的好,但是作為一本入門書,筆者比較推薦《Pthreads Programming》,除了因為這本書廢話不多,一開始就切入主題之外,有更大的原因是因為,讀者只需要懂一些簡單的Unix 程式開發,就可以很快學會如何使用PThread。這兩本書,即使出版年份距今已有8年以上,對於目前還需要在Unix上開發多執行緒應用程式的人,一樣具有非常高的參考價值。

在這個Java與.NET的時代
如本文前面所提,這是一個以Web應用程式為主的時代,而採用的開發平臺,除了PHP以外,就屬Java(Servlet/JSP)與.NET)ASP.NET)。就算要開發Unix平臺上的應用程式,也開始有許多軟體採用Java(AWT/SWING)開發,如果要開發Win32平臺的應用程式,採用.NET(Windows Form)而捨棄MFC/ Delphi的開發者也不在少數。再這個時代,開發原生(native)應用程式變成了相對少數人才具有的技能。

不管是Java或.NET的Web應用程式開發人員,多半很少體會到多執行緒的好處,這是因為底層的Container已經充分利用多執行緒增加系統效能,而位於更上層的開發人員,雖然工作簡單了,但是也無形間喪失了學習多執行緒的能力。相較之下,使用AWT/SWING或Windows Form的開發人員,非得好好學習多執行緒,才能做出有效率的使用者介面。

教導如何在.NET下使用多執行緒的書本來就不多,筆者推薦MANNING的《.NET Multithreading》,如果是採用Java開發,那麼O'Reilly 的《Java Threads, 3/e》一樣是不錯的選擇。《Java Threads, 3/e》已經由歐萊禮臺灣分公司翻譯成中文版《Java Threads 深度探討》,雖然在翻譯上,很多英文長句都沒有經過斷句,就直接翻成一串很長的中文句子,但是整體而言,品質仍然不錯。

需要注意的是,《.NET Multithreading》非常適合新手入門,但《Java Threads, 3/e》並非如此,即使是第一章,採用的範例也稍嫌複雜,初學者可能看了老半天,仍會丈二金剛摸不著腦袋,筆者建議可以先讀讀Prentice Hall PTR的《Core Java 7/e, Volume2》裡面關於Thread的章節,然後再回頭看《Java Threads, 3/e》,如此才會效果顯著。

由於J2SE 5.0之後,Java在Thread上不再只是簡單的synchronized關鍵字配上wait() 、notify()、sleep()等函式,還引進了Concurrency Utility,讀者在購買這兩本暢銷書時,別忘了購買最新講解J2SE 5.0的版本,才能學習到Java在Thread上的最新變化。

Thread人人會用,巧妙各有不同

話說戲法人人會變,巧妙各有不同。獨孤求敗用木劍就能夠與對手大戰七天七夜,平常人拿了倚天劍屠龍刀,恐怕也只能任人宰割。雖然多執行緒程式在撰寫上較為困難,但是本身並非一個非常大的議題。光知道每一種平臺對多執行緒的支援並非難事,但是如何運用這些基本元素,充分利用多執行緒的優點,恐怕在上述的書籍中著墨不深。

多半的人會認為,J2SE 5.0以前的Java,雖然支援多執行緒,但卻只是簡單的支援,只有J2SE 5.0之後,Java對多執行緒的支援才算完整,也才能做到許多過去很難完成的工作。但是當您看了博碩文化出版的《Java Multithread Design Pattern-Java多執行緒與平行處理》之後,有這樣觀念的人就會發現既有觀念大錯特錯。

這本原著以日文寫成,專門探討Java Thread的書籍,使用JDK 1.3為基礎,即使沒有J2SE 5.0所提供的花俏功能,一樣變出許多戲法。尤其是第一章後面的練習題,就算許多自認懂得使用Java撰寫多執行緒程式的人,或是為了認證考試熟讀Java Thread的人,非常有可能在做完練習題之後,才發現自己原來根本不懂Java Thread。
筆者也是在讀完這本書之後,才知道Thread的世界原來別有一番天地,不只是教科書上那些枯燥的演算法。雖然最近電視上常看到一堆抗議日本的遊行與相關新聞,不過,筆者相信『不以人廢言』,才能學到更多知識,眼界也才能更開拓。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: