作者:HaigLee
http://www.reibang.com/u/67ec21fb270d
本文由 HaigLee 發(fā)布塑煎。未經(jīng)許可墩瞳,禁止轉(zhuǎn)載查吊。
一個(gè)程序的好與壞需要有一個(gè)評(píng)判標(biāo)準(zhǔn)通惫,那這個(gè)標(biāo)準(zhǔn)是什么呢鼻忠?下面我們來探討一下這個(gè)問題:
安全性——不損壞對(duì)象
所謂安全性(safety)就是不損壞對(duì)象服鹅。這是程序運(yùn)行的必要條件之一凳兵。
對(duì)象的損壞只是一種比喻,實(shí)際上企软,對(duì)象是存儲(chǔ)上的一種虛擬事物庐扫,并不會(huì)實(shí)際損壞。對(duì)象損壞是指對(duì)象的狀態(tài)和設(shè)計(jì)者的原意不一致仗哨,通常指對(duì)象的值并非預(yù)期的值形庭。
如果一個(gè)類即使被多個(gè)線程同時(shí)使用,也可以確保安全性藻治,那么這個(gè)類就稱為線程安全(thread-safe)類碘勉。由于類庫中還存在著非線程安全的類,所以在多線程程序中使用類時(shí)一定要特別注意桩卵。例如:java.until.Vector類就是線程安全的類验靡,而java.until.ArrayList則是非線程安全的類。一般在API文檔中能夠查到各個(gè)類是否是線程安全的雏节。
生存性——必要的處理能夠被執(zhí)行
生存性(liveness)是指無論在什么時(shí)候胜嗓,必要的處理都一定能夠被執(zhí)行。這也是程序正常運(yùn)行的必要條件之一钩乍。
即使對(duì)象沒有損壞辞州,也不代表程序就一定好。極端一點(diǎn)說寥粹,假如程序在運(yùn)行過程中突然停止了变过,這時(shí)候,由于處理已經(jīng)停止涝涤,對(duì)象的狀態(tài)就不會(huì)發(fā)生變化了媚狰,所以對(duì)象的狀態(tài)也就不會(huì)異常。這雖然符合前面講的安全性的條件阔拳,但無法運(yùn)行的程序根本沒有任何意義崭孤。無論是什么時(shí)候,必要的處理一定能夠被執(zhí)行——這就是生存性。
有時(shí)候辨宠,安全性和生存性會(huì)互相制約遗锣。最典型的示例就是死鎖(deadlock),即多個(gè)線程互相等待對(duì)方釋放鎖的情形嗤形。
可復(fù)用性——類可以復(fù)制利用
可復(fù)用性(reusability)是指類能夠復(fù)制利用精偿。這雖然不是程序正常運(yùn)行的必要條件,但卻是提高程序質(zhì)量的必要條件赋兵。
類如果能夠作為組件從正常運(yùn)行的軟件中分割出來还最,那么就說明這個(gè)類有很高的可復(fù)用性。
在編寫多線程程序時(shí)毡惜,如果能夠巧妙的將線程的互斥機(jī)制和方針隱藏到類中,那這就是一個(gè)可復(fù)用性高的程序斯撮。java.util.concurrent包中就提供了便于多線程編程的可復(fù)用性高的程序经伙。
性能——整快速、大批量地執(zhí)行處理
性能(performance)是指能快速勿锅、大批量的執(zhí)行處理帕膜。這也不是程序正常運(yùn)行的必要條件,但卻是提高程序質(zhì)量時(shí)應(yīng)該考慮的條件溢十。
影響性能的因素有好多種垮刹。下面是從Doug Lea 的性能分類中摘錄出的主要部分。
吞吐量(throughput):是指單位時(shí)間內(nèi)完成的處理數(shù)量张弛。能夠完成的處理越多荒典,則表示吞吐量越大。
響應(yīng)性(responsiveness):是指從發(fā)出請(qǐng)求到收到響應(yīng)的時(shí)間吞鸭。時(shí)間越短寺董,響應(yīng)性也就越好。在GUI程序中刻剥,相比于到處理“結(jié)束”時(shí)的時(shí)間遮咖,到處理“開始”時(shí)的時(shí)間更為重要。前者是指實(shí)際處理所花費(fèi)的時(shí)間造虏,而后者是到程序開始響應(yīng)用戶所花費(fèi)的時(shí)間御吞。相比于按下按鈕后無任何反應(yīng),10秒后才提示“處理完畢”這種方式漓藕,在按下按鈕時(shí)應(yīng)立刻提示“處理開始”這種方式的響應(yīng)性更高陶珠,即便是到處理結(jié)束花費(fèi)的時(shí)間多一點(diǎn)也沒有任何關(guān)系。響應(yīng)性好也稱為等待時(shí)間(latency)短撵术。
容量(capacity):是指可同時(shí)進(jìn)行的處理數(shù)量背率。例如服務(wù)器能同時(shí)處理的客戶端數(shù)或文件數(shù)等。
其它的諸如效率(efficiency)、可伸縮性(scalability)寝姿、降級(jí)(degradation)等交排,也可作為性能的評(píng)價(jià)標(biāo)準(zhǔn)。
有時(shí)候饵筑,這些要素之間是互相制約的埃篓。例如,如果要提高吞吐量根资,那么在很多情況下架专,程序的響應(yīng)性就會(huì)下降。如果要提高安全性玄帕,那么性能就有可能會(huì)下降(如吞吐量變胁拷拧)。
總結(jié)
安全性和生存性是必須遵守的標(biāo)準(zhǔn)裤纹。在此基礎(chǔ)上委刘,考慮如何提高可復(fù)用性和性能。
作者:HaigLee
http://www.reibang.com/u/67ec21fb270d
本文由 HaigLee 發(fā)布鹰椒。未經(jīng)許可锡移,禁止轉(zhuǎn)載。