今天聊一個簡單的問題,增加更多內存會讓你的計算機速度變快嗎?
要想解答這個問題,我們需要知道cpu、內存與程序這幾者的關聯,實際上非常簡單:
首先,可執行程序存儲在磁盤中(當然也可以是其它介質),可執行程序中實際上主要包含兩部分內容:機器指令以及指令依賴的數據;
程序運行時首先被加載(load)到內存中,被加載到內存中的程序搖身一變就成為了我們說的進程,當然,內存中還運行著另一種特殊的程序:操作系統。
只有當CPU真正執行機器指令時相應的進程才開始運行,此時CPU不斷的從內存中取出指令并執行指令,當然除了機器指令外還需要讀取內存中的數據。
可以看到,當程序運行時與CPU交互的是內存而不是磁盤,內存中存儲指令和數據、而CPU使用指令和數據,因此從這個角度看這是一個類似生產者與消費者問題,內存就好比大廚、CPU好比食客,如果大廚上菜太慢那么食客就要挨餓。
除此之外,操作系統對內存的使用也不可忽略。
操作系統是如何利用內存的?
為充分利用內存與磁盤資源,現代操作系統中有很多非常聰明的設計。
由于CPU一次只能運行一個程序,即使在多核系統中一般來說同時存在的進程數遠遠多于核數,也就是說在某一個時刻并不是所有的程序都在運行,即使對正在運行的進程來說由于局部性原理的存在,進程地址空間中總會有一部分指令或者數據是暫時用不到的。
基于這些,操作系統先驅們看到了可以充分利用內存的機會,我們可以**將暫時用不到的指令或者數據放到磁盤上去(swap out),當使用這些數據或者指令時再從磁盤加載到內存中(swap in)**。
這樣內存中不就有更多空間運行更多進程了嗎?
這種思想在操作系統中被稱之為demand paging,屬于虛擬內存的一部分。
其次,操作系統會將剩余的空閑內存當做磁盤緩存,有時當系統負載較低時,我們的程序并不能充分利用內存,那么這些空閑的內存就真的毫無用處了嗎?
顯然不是的,我們知道磁盤是一種低速的存儲設備,既然這樣為什么不把空閑的物理內存當做磁盤的緩存呢?
大家可能都有這樣的體驗,開始打開一個全新的文件時通常會比較慢,但當你再次使用該文件時將明顯感覺到速度會快很多,背后的原理就在于此,如果此時你的內存不足,那么操作系統就沒有那么多的空閑內存來當做磁盤緩存,此時你將真正體驗到磁盤蝸牛般的速度。
現在,我們就可以回答開始提出的問題了,增加內存會加快計算機運行速度嗎?
顯然這樣分為兩種情況來討論:
內存充足
內存不充足
內存充足
如果你的內存本身就很充足,那么在這種情況下增加更多內存將不會讓你的計算機跑的更快,因為CPU作為食客吃飯的速度是有限的,大廚做的菜再多也沒有,你也沒辦法讓食客吃的再快一些。
這就好比你問給一輛卡車裝更多輪子會讓開車跑得更快嗎?
答案顯然不是的,盡管這并不能讓卡車跑得更快,但增加更多輪子會讓貨車有更高的載重。
對內存來說也是這樣,盡管增加更多內存并不能讓計算機跑得更快,但這顯然會讓我們可以同時運行更多程序。
增加更多內存意味著你可以同時開啟更多瀏覽器網頁、可以同時開啟更多虛擬機、同時渲染更多高清視頻、同時處理更多復雜的3D模型、同時訓練更多機器學習模型等等。
此時你的內存不是瓶頸,CPU將很可能成為瓶頸,因為CPU的運行速度也就是每秒內執行的機器指令數量是有限的。
內存不足
此時大廚上菜速度太慢,食客總是挨餓,因此大廚需要上更多的菜。
我們知道,大部分程序在運行過程中會頻繁的申請內存,申請內存是一項看似簡單實際上非常復雜的操作、尤其是在系統內存不足的場景下,此時申請內存往往涉及到更多復雜的查找或者異常處理,這時我們的程序運行速度將會明顯變慢。
內存不足時,磁盤與內存之間可能會有更多的交換,此時系統的速度將受限于磁盤,并且由于不能緩存磁盤文件, 那么我們開啟進程或者打開文件的速度將明顯變慢。
在這種情況下增加內存將更好地喂飽CPU,因此將明顯加快計算機的運行速度。
總結
從上述分析我們知道,關于增加內存是否可以加快計算機速度取決于你的場景。
如果你的設備內存充足,那么此時增加內存不會明顯加快計算機運行速度。
如果你的設備內存不充足,那么此時增加內存會明顯加快計算機運行速度,因為可以減少磁盤與內存之間交換次數。
審核編輯 :李倩
-
內存
+關注
關注
8文章
3034瀏覽量
74137 -
操作系統
+關注
關注
37文章
6847瀏覽量
123427
原文標題:增加內存會讓計算機變快嗎?
文章出處:【微信號:小林coding,微信公眾號:小林coding】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論