Ruby的語法可以借鑒,但其本身的實現就免了
說Ruby是一種沒有光明前途的語言的原因:
Ruby的Thread是偽線程,不管代碼中寫了多少個Thread.new,Ruby都只啟動了一個線程去運行這些Thread的代碼。
這樣做的確使得Ruby的Thread很容易控制,程序也不容易產生類似死鎖這類嚴重的線程問題。但是效率始終無法提高,因為在ruby進程中,實際上只有一個真實的線程在運行,同樣的代碼在那么多核或者多cpu的電腦上運行效率和單核cpu的電腦上的效率并不會相差多少。
你目前在工作站上用的CPU時鐘速度是多少?10GHz么? 2001年8月Intel芯片就達到2GHz,按照2003年前的CPU發展趨勢推算,到2005年初,我們就能擁有第一塊10GHz的Pentium芯片。但實際上沒辦到。而且情況好像越來越糟——我們根本就不知道到底在什么時候這樣的芯片可以出現。
那么放低期望,4GHz又如何呢?目前我們已到3.4GHz——那么4GHz已經不遠了吧?唉,好像4GHz也遙不可及。可能你知道,Intel首先于2004年中將4GHz芯片的發布時間推遲到2005年,而到了2004年秋季,則徹底取消了4GHz計劃[譯注11]。在本文寫作的同時,Intel宣布計劃到2005年早期,實現到3.73GHz(即圖中的右上最高處)的微量提升。所以,至少就目前來說,時鐘速度的競賽實際上結束了,Intel和其他大多數處理器廠商將把旺盛的精力投入到多核等方向去。
也許,我們某天在主流PC里能裝上4GHz的CPU,但2005年別想。Intel實驗室里的確已經有運行在更高速度的芯片——不過代價是驚人的,比如龐大數量的冷卻裝置。你想不久在你的辦公室里就有這樣的冷卻設備,坐飛機的時候,就把它們放在你膝蓋上?別做夢了!
如果應用程序想充分利用CPU吞吐增加量,那它們就必然日益需要并發,這種形勢逐漸明朗,并將在接下來的數年里深入發展。Intel已經揚言未來他們會推出集成100顆內核的芯片,那么單線程應用最多就只能利用這種芯片1/100的潛在生產力。“哦,性能沒那么重要吧,計算機總是跑得越來越快”的論調已經變得天真而可疑,甚至在未來不久將完全錯誤。
總結一下我的觀點:
CPU性能提升途徑主要是靠實現多核,靠提高主頻是沒有多大希望了,而單線程僅僅能利用單核資源,嚴重浪費了多核CPU提供的性能,不幸的是,Ruby的線程是偽線程,即始終僅有一個線程在執行,隨著軟件的日益龐大,Ruby將不得不求助于CPU主頻的提升,但像前面所說的那樣,4G都是一個遙不可及的目標,別提10G甚至更高了。我堅信,RoR終有一天不堪重負,被Java擊潰!?