如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2005年9月30日

下一波程式設計的挑戰-multithreading 讀後感

看過另一篇文章"程式設計師的保鮮期只有十年", 恰巧Java誕生至今剛好十年, 不過Java的熱度未退, 如同Pascal, Fortran, COBOL 沒有什麼語言,什麼技術是永遠的主流的, 程式設計的思維從結構化到物件導向, 從單機處理,Client-Server,到Multi-Tier, 隨著硬體發展而重新被提起的平行處理/多執行緒的應用.
不要讓自己成為"過期"的IT人員, 只有持續的學習, 保持謙卑與彈性來面對改變!
-- Fred Wang

下面文章是冼鏡光老師(資訊科系的學生應該很熟悉吧!)在程式設計師俱樂部發表的文章, 這裡還有許多的討論
http://www.programmer-club.com/pc2020v5/forum/showsametitleN.asp?board_pc2020=general&id=3499

下一波程式設計的挑戰:multithreading
作者 : shene(冼鏡光)

也許說平行處理太曲高和寡,因為沒多少人買得起,談起來總是相當遙遠。但是我們的桌上型電腦的速度卻也愈來愈快,想當年有一台8mhz的PC就可以引以自豪,再比一比目前3.4ghz的PC,兩者的差別何止千里!問題是,CPU的速度不可能無止境地加快,終有到達瓶頸的一天;沒有人知道這一天何時到來,但若目前的瓶頸無法突破(事實上也很難突破),我們寫程式的人終究有一天會覺得CPU不夠快,我們有對策嗎?我們的知識與技術足以克服這個障礙嗎?
在硬體方面,Intel與其它廠家已經加上了hyperthreading的功能,但效能的增加在最好的狀況也不過是10%到15%而已。所謂的 hyperthreading,指的就是CPU中會把待執行的指令分成幾條執行線(thread),讓CPU可以在一條線無法繼續時(譬如等待cache 來的資料,或是等待另一條線完成某項工作),能夠執行另一條線的工作。但是運算單元與邏輯單元在CPU中都只有一個,所有執行線都搶著用,於是瓶頸就出現了。
今年,各廠家可能會推出multicore的CPU,把兩個或更多個CPU的功能放在固一個CPU中,因此CPU中的執行線就至少有兩組運算單元與兩組邏輯單元可以使用,這樣hyperthreading的效能又可以再度提高。聽說Intel會把兩個Xeon合併在一個CPU中,並且在今年上市;AMD據說也有類似計劃,當然PowerPC與SPARC也不會落後太遠。
如果這些新一代硬體出現,一般的程式設計技術就不太夠用了,用為我們從頭開始所學的都是「序列式」(serial)的思考方式,所以寫成的程式很可能使hyperthreading與multicore 的架構無用武之地。然而,複線作業(multithreaded programming)的觀念在1960年代末遂漸成型,從IBM PL/I F,全錄(Xerox)的Star,到Modula 3、Ada與Java,這些語言本身都具有複線作業的能力。另外,Unix在1980年代中期也引進了複線作業的能力,後來ANSI的POSIX加上 Pthread標準,以及OS/2、Windows與Sun Solaris都有此等能力。
為什麼複線作業那麼重要?很簡單,如果一個程式有個分身來做額外的事,程式的效率與CPU的使用率就都會提高。好比說,當一條執行線正在等輸出輸入完成時,我們可以起動另一條線進行計算的工作,於是 CPU就不會閒置,從而CPU使用率就會比較高,程式也執行得比較快。這些觀念在您的OS課程中應該學過,正因為如此,我很想請教各位一個很嚴肅的問題:
您準備好迎接下一波程式設計的挑戰了嗎?
過年放假不少天,在吃喝玩樂之餘,我們得真心想一想這個問題的答案。
後記:不知道什麼人始作俑者,把thread譯成「執行緒」而不是上面用的「執行線」。這個「執行緒」譯名的確有點滑稽,程式或系統中何「緒」之有?

沒有留言:

張貼留言

歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)