1. 程式人生 > >如何讓程序更快的運行

如何讓程序更快的運行

速度 sockets 方法 關鍵字 cpu 總線 不可變 線程安全 能力

1、客觀上說程序運行必會收到硬件資源如CPU計算能力、IO讀寫速度、網絡帶寬和軟件資源如sockets連接數、數據庫連接數的限制,為了更快的讓程序運行盡早完成它要完成的任務就要突破這些限制。突破硬件資源的限制的方法是將程序的任務分解到多臺硬件組成的集群上來執行;突破軟件資源的限制可通過資源池的方式來解決。

2、為了更快的提升計算資源的使用效率,電腦系統中運行最快的CPU采用時間片輪換的方式來執行多個任務,如果一個任務還沒執行完就要保存當前任務的上下文,下次再執行時再加載這個任務的上下文,這個過程稱為上下文切換,上下文切換也會消耗系統資源,為了更高效的利用資源,要盡可能的減少上下文切換。

3、多任務(線程)運行時必然會涉及到共享變量的訪問,保證在多任務執行下共享數據的安全訪問稱之為線程安全,Java中將線程安全劃分為5類:不可變、絕對線程安全、相對線程安全、線程兼容、線程對立。

4、如何更好的共享數據,可以用不同步、非阻塞同步、互斥(組賽)同步。不用同步要保證代碼塊是可重入的或者使用ThreadLocal以空間來換時間的方法來進行。非阻塞同步多基於CAS自旋操作,又稱樂觀鎖策略。互斥同步主要是應用各種鎖,從最原始的同步關鍵字重量級鎖逐步優化出現輕量級鎖,再優化出現偏向鎖;為了讓程序能在大多數情況下更高效的運行,jdk6、7默認使用了偏向鎖,若不成功會依次升級用輕量級鎖、傳統重量級鎖。

5、操作原子性是多線程同步的一個重要特性,傳統CPU通過阻塞總線來實現原子操作,現代CPU增加了阻塞鎖定緩存來實現原子操作的特性。JAVA中要實現原子操作,要麽通過鎖同步,要麽通過原子類的CAS自旋操作實現。

晚上睡了,未完待續……

如何讓程序更快的運行