我所認識的軟件開發原則:減少等待時間

[size=medium] 在系統或設備交互時,因處理效率不一致,經常會導致等待的發生。最初這種矛盾在計算機內部尤爲突出。高速CPU與低速外部設備之間數據處理的頻率差異,使CPU在絕大部分的時間週期內不做任何事情。計算機專家不能允許這種無謂浪費,異步處理模型被引入。

其實在與計算機相關的域模型中,頻繁等待的不至CPU。使用計算機系統的人,等待數據庫中數據的應用程序,等待網絡返回的瀏覽器。在等待的過程中,這些域模型可能什麼事也不會做。相似的場景反覆出現,就迫切地需要我們減少等待時間,提高利用率。

爲了實現這樣的目標,我們需要關注當前的三大主流思想:多線程,緩存和異步模型。它們的出發點和使用場景不同,但都會縮短等待時間。下面針對這三種思想做大致分析。

[b]多線程[/b]

對於一個耗時或是大數據量的任務,在單線程執行時,我們在等待結果,高速CPU在等待執行數據。爲了減少這種等待,用多個線程來分段執行任務,縮短等待結果的時間,在一定程度上提高CPU的利用率。

當然多線程更適用於多個各異任務同時執行,在系統中適時分攤各個任務執行的時間和佔用的資源,以達到資源的有效利用。

對於多線程大家瞭解的很多,這裏算是簡略提到。

[b]緩存[/b]

有人甚至這樣說,Web2.0的特點就是緩存,對於這種理解深以爲然。基於網絡的應用需要跨越瀏覽器、網絡、服務器和數據庫等一系列基礎設施,在每一點上都有很多操作流程和邏輯處理。所以緩存-[i]把數據送到離用戶最近的地方[/i]-的理念大行其道。瀏覽器存儲着最近訪問過的內容,用戶請求被分發到離用戶最近的CDN,對網絡應用的每個請求都要經過Squid,應用所需要的數據庫中的常用數據存放在Memcached中,以及其它各式各樣的緩存模型。這些各式各樣的緩存構建於終端用戶於系統應用之間。每層緩存所支撐的,就是當前緩存的目標用戶。

當然不至這些,有同樣目的的衆多應用或是硬件都叫緩存。在減少“用戶”等待方面起着極其重要的功能。

[b]異步[/b]

多年來我們的程序基本是同步執行。異步模型沒能正常推廣的原因有如下原因,一是異構的系統設計複雜,出現的比較少;二是很少有像CPU與外部設備在處理頻率上的極大矛盾;三是異步模型本身的技術要求很高。

但當前異構系統不斷湧現,隨之而來的是衆多的RPC框架。在高層系統交互之間實現的異步模型,可以有效降低系統等待時間,減少系統耦合度。在更低層,模塊或是代碼級的異步處理變得越來越重要。對於Java來說, Java Concurrent API 對於異步模型的成長起着推波助瀾的作用。

與前兩個主要點的普及度相比,異步模型正不斷走向前臺,必將成爲未來的主流技術。

出來混遲早是要還的。使用這些模型本身是一種高風險投資,伴隨着處理效率提高、等待時間降低等優點,技術和實現難度將成爲是否選擇的一個很大權衡點。如多線程併發可能會出現很難琢磨的異常情況,多級緩存間的數據同步問題,異步系統的執行監控問題等等。但之前的很多普通技術已經很難有潛力去挖掘來提高系統效率,本着技術創新的角度,我們應當在這些新的主流思想上有所作爲。
[/size]


[size=medium][url=http://langyu.iteye.com/blog/746179] 我所認識的軟件開發原則:權衡[/url]
[url=http://langyu.iteye.com/blog/744455] 我所認識的軟件開發原則:封裝[/url]
[url=http://langyu.iteye.com/blog/745053] 我所認識的軟件開發原則:簡單表述[/url]
[url=http://langyu.iteye.com/blog/744442] 我所認識的軟件開發原則:二八原則[/url]
[/size]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章