本地性能最大化==處理器調度+內存調度+IO調度

不是隻有處理器是有限的資源。內存同樣是個有限的資源。程序員

不是隻有處理器是用週期來衡量的。內存一樣是有周期(或者說時間)的。編程

若是說處理器只是一個時間資源,那麼內存就是一個時間+空間二維資源。設計模式

所謂維度,只是主觀的概念。測量最重要的是不要miss掉任何東西。象一個線性的內存地址空間,我想用N維來表示它均可以。甚至我也能夠用它來表示N維的空間。但個人意思並非要說明這個很重要或證實任何別的東西。我想表達的是,內存它剛纔存在,如今還存在,未來仍然會存在。只要它存在,它就能夠「思考」。笛卡爾說,我思故我在。內存說,我在故我思。網絡

放棄內存這麼一大片好資源不用而去絞盡腦汁從進程切換的空檔中「擠」出點處理器週期出來,是很是愚蠢的行爲。試想,若是你是處理器,你會怎麼想?進程切換佔你工做的百分比是多少?處理器調度真正有意義的「空間」在於代碼效率優化。也就是說,它的上司(程序員),派給它的工做任務中,有多少是重複的。若是沒有,那麼就絲毫空間都沒有。若是有,那就要弄清楚究竟是什麼?所以,若是說有意義,關於處理器調度,真正有意義的只有代碼效率的提高。好比,你認爲虛擬機太慢,因此決定本身寫指令(用很底層的語言或直接用匯編)。別的事情,意義真的不大。好比,我假設進程切換的處理器開銷跟你的應用進程的處理器開銷同樣大。那麼即便解決這個問題,你的性能提高也不過一倍而已。面對高峯問題,你仍然得跟你老闆提申請或借錢買機器。別無他法------對你來講!架構

 

組合原理:函數式編程

按照函數式編程的思想,一切均可以被視做函數。因此我如今就把一切都視爲函數,來討論程序的組合。函數

程序的組合有兩種:一是靜態組合,一是動態組合。靜態組合指打包;動態組合指運行時組合。性能

動態組合的目的是爲了讓代碼分工合做。這種組合可能又能夠分爲多個層次上的組合,系統級的組合,應用級的組合,庫級的組合,類級的組合,方法或函數級的組合,甚至網絡級的組合。每一個層次的組合由於組合環境的不一樣,使用的方法各不相同。如系統級可能使用WEB SERVICE或REST,HTTP,TCP等等都有可能。網絡級的組合象TCP/IP協議組,或DNS協議,路由協議等。應用及庫級的組合則可能使用OS級的消息服務或自定協議,對象協議,共享內存等,也能夠直接使用網絡協議。類級的組合使用共享內存的辦法進行通訊,也可能使用對象協議或其它通訊方式。優化

方法級的組合則基本上使用「調用」的方式來完成。設計

而調用又分兩種:一種是直接調用,一種是間接調用。若是考慮大量調用的狀況(如今最流行的架構方法------分層,設計模式都是這種狀況的誘因),直接調用比起間接調用在內存空間上的消耗要節免得多。雖然在處理器資源上的消耗並無區別(由於一樣的工做量,時間仍然是相同的------甚至進棧出棧的總時間都是同樣的。由於每一次方法調用都必將分別有一次進棧與出棧的時間------若是不考慮尾調用優化的話)。好比,以直接調用的方式對一個函數調用1次與重複調用10次的區別並不大;但以間接調用的方式對一個函數進行遞歸10次的調用,就將消耗10倍的內存。由於每次調用都將產生一個全新的棧幀,而且這個棧幀的大小與前面一次調用所產生棧幀的大小如出一轍。這就是爲何遞歸很容易knock down系統的緣由。

這是代碼層次上的優化。

相關文章
相關標籤/搜索