爲什麽感覺一台計算機能花幾分鍾運行幾行代碼,卻能如此快速地運行複雜的東西,比如遊戲?

爲什麽感覺一台計算機能花幾分鍾運行幾行代碼,卻能如此快速地運行複雜的東西,比如遊戲?69 2021-12-31 23:40:57

問題問的大錯特錯。什麽叫“感覺一台計算機能花幾分鍾運行幾行代碼”,看這一句,我猜題主是一個計算機專業的新生,編寫代碼的時候産生了這種疑問。但是如果你耐心繼續學習,等到大二大叁把一些專業課上完的話,就不會問出這種低級問題了。


編譯和運行不一樣

很多初學者分不清編譯和運行,認爲只要點擊了IDE上的運行按鈕,程序就開始運行了,其實這是錯誤的。就拿C語言爲例,點擊Clion或者visual studio或者其他IDE上面的運行按鈕之後,IDE會首先保存代碼文件,然後開始編譯,生成後綴名爲.o的中間文件,然後根據頭文件再把生成的和系統庫鏈接在一起,最後才能生成可執行文件。


編譯這個過程是一項非常複雜的工作,具體有多複雜,等到題主學了編譯原理這門課就明白了。根據編程語言的設計不同,編譯的時間也有長短之分,但是一般情況下都遠遠遠遠長于程序運行的時間。一旦編譯完畢,就按照專業課上程序的複雜程度,基本上都是瞬間就可以運行完畢的。不信的話,可以在不修改代碼的情況下在此點一下運行按鈕,這時候就可以發現代碼是瞬間運行完畢的。


現代處理器的運行速度是非常非常快的

我從小就對計算機非常感興趣,每次學校發的計算機課本我都是第一時間看完,然後反反複複的來回看。沒辦法,誰叫當時家裏沒錢買電腦呢。所以計算機課本裏面的一些內容,我至今仍然都記得。世界上第一台計算機叫做埃尼阿克,運行速度是每秒5000次加法。這個速度現在雖然看起來非常垃圾,但是還是遠超手工計算的。那麽現在處理器的運行速度是多少呢?我查了一下維基,2017年出廠的AMD 銳龍1800x,每秒鍾可以運行叁千億次指令。這還不是現在最新最強處理器,如果是現在新的處理器,速度只會更快。


之所以我們感覺程序運行慢,一般情況下都是因爲出現了瓶頸拖累了處理器。例如下面的代碼,將1000個數字打印到終端上。因爲涉及了IO,所以會給人速度慢的錯覺。要知道向終端輸出是一件非常慢的事情。但是如果你通過重定向將輸出轉移到文件裏的話,可以發現程序仍然是瞬間運行完畢。我曾經嘗試過輸出幾百萬的數據,導出到文件中也就是幾兆的事情而已,也是瞬間完成的。



最後回到問題,首先程序運行速度和代碼行數沒有任何關系。如果是一個死循環,那麽就算他很簡單,也是永遠也運行不完的。就算只調用了一個函數,可能這個函數背後有很大一坨邏輯,因而運行速度會受到影響。


然後是那些編程題,其實都屬于小兒科的水平,純運行的話,基本上都是瞬間就可以運行完成。之所以感覺到慢,要麽是你把編譯時間當成了運行時間,要麽就是涉及到了IO等浪費時間的操作,不要因爲有東西拖後腿就懷疑現在處理器的能力。


最後就是遊戲了。遊戲作爲一個高度工業化的産品,做出來就是爲了讓玩家玩的爽,做出來就是爲了賺錢的。那麽遊戲自然是一個經過高度優化的計算機程序,理所當然的可以發揮出處理器本身的水平。一般人玩遊戲也就是讀圖的時候卡一下,加載完畢之後,可以順順當當的流暢遊玩。這才是處理器本來就有的性能。

下一篇:拼多多和淘寶店哪個比較容易做
上一篇:非洲南部傳統黑人
返回頂部小火箭