馮.諾伊曼體系結構是現代計算機發展的基礎,特點如下:
1:必須有一個存儲器;
2:必須有一個控制器;
4:必須有輸入設備和輸出設備,用于進行人機通信。
在這個體系中,程序和數據必須經過內存儲器(RAM)后,才能有運算器完成數據加工和處理,而內存儲器在斷電之后就會丟失所有的程序和數據,因此主存儲器RAM必須把程序和數據同步到外存儲器(硬盤)保證在計算機在斷電之后程序和數據不丟失。
同時,內存儲器RAM,CPU(運算器+控制器),外存儲器硬盤的處理能力不同,并且差別很大,如下以普通家用電腦為例來說明(服務器的相關性能會提高,但是三者之間差別和普通家用電腦類似)。
CPU:處理能力最高,以Intel i9為例,25.5GB/s
RAM:以DDR3為例子,大概是10GB/s
硬盤:最低,固態硬盤大概500MB/s
因此,程序在設計時要充分考慮到這種差別,采用一定的策略來取長補短,達到系統的最優使用率。以下舉例從不同的角度來闡述。
例子1:Linux內部命令和外部命令
Linux在系統啟動的過程中,會把某些常用的或者系統認為優先級別高的命令即內部命令常駐內存,這樣,在執行內部命令時,速度會更快。
對于外部命令,在第一次執行時,會有從硬盤讀取這個命令到內存的過程,相對于內部命令執行速度會較慢,之后,這個外部命令也會駐留在內存中一段時間,在此期間內,再次執行此命令的速度和內部命令同等,因為省去了從硬盤讀取到內存的過程。外部命令在內存中的查詢和管理可以通過hash指令。
例子2:讀文件的時間atime更新機制
文件的atime在每次訪問文件時,理論上都應該更新,但是實際上atime的更新是系統自動來控制的,一般來說,atime相比mtime,ctime的重要性沒那么高,所以系統決定在自已認為合適的時間去更新atime,比如在硬盤寫操作很少時更新或關機之前把atime更新到硬盤上等,這樣省去了每次訪問文件時,因更新atime導致的資源競爭,比如,在某一時刻,硬盤在做大量重要的文件寫操作,硬盤的訪問速度是這個體系中最慢的,如果在此時系統強制更新atime,意味重要文件寫操作就會停止或變慢。
例子3:ORACLE數據庫更新表數據機制
ORACLE在數據庫表更新時,當提交完commit命令后,內存的數據會立即變化,但是并不會馬上同步更新到硬盤,因為批量更新的效率是要高于單個數據更新,如每次更新1K,一共更新10次數據從內存到硬盤,效率要遠遠低于一次性更新10K。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/94606