首頁/ 遊戲/ 正文

上帝視角:程式設計師為什麼需要理解 CPU?

可能有的同學會問,程式設計師寫程式碼就好了,為什麼需要去理解CPU啊?不嫌累啊?啊?啊?你倒是說啊。

上帝視角:程式設計師為什麼需要理解 CPU?

計算機系統!=漢堡包

在之前的文章中我把計算機系統比作一個漢堡包,這個類比不太恰當,雖然漢堡包是層級結構,但它是上下對稱的,計算機系統的層級結構顯然不是對稱的,你要說披薩還差不多,注意是披薩,不是餡餅,因為餡餅也是對稱的

上帝視角:程式設計師為什麼需要理解 CPU?

計算機系統的結構是上層基於下層,並且上層對外遮蔽下層,因此用洋蔥來比喻計算機系統是再恰當不過了,這兩者都是層級結構,下層對上層都不可見,最妙的是,這兩者看時間長了都會辣眼睛!

上帝視角:程式設計師為什麼需要理解 CPU?

這種層級結構保證了處於上層程式設計師無需理解下一層。

上帝視角:程式設計師為什麼需要理解 CPU?

模糊的精確

你的確不需要知道底層全部的微觀細節,實際上我也不相信有誰能全部知道,如果你太注重細節,沒有對計算機系統的大局觀而是一頭扎到細節裡,最終也只是徒勞,只挖掘細節很像是一種“模糊的精確”。

上帝視角:程式設計師為什麼需要理解 CPU?

上帝視角:程式設計師為什麼需要理解 CPU?

精確的模糊

但是,如果你能知道底層的宏觀上的原理,情況就不一樣了,我把這種宏觀上的不那麼細節的理解稱之為“精確的模糊”,老外有一個詞我認為很貼切:The Big Picture。

上帝視角:程式設計師為什麼需要理解 CPU?

程式設計師這一行,個人認為精確的模糊要遠好於模糊的精確,因為前者要想進一步瞭解細節是很容易的(只是需不需要的問題),反之則非常困難。而且依靠這種精確的模糊已經能解決很多問題,而後者則不能。

上帝視角:程式設計師為什麼需要理解 CPU?

上帝視角

每一個大家認為的高手腦海裡都有這樣一種精確的模糊(或者精確的精確,高手中的高手),ta可能不知道編譯器(直譯器)、連結器、作業系統、網路協議棧、CPU、記憶體等等所有核心模組的全部細節,但是ta知道這些模組“應該”怎樣工作,當你有了這種理解後,你會發現:

你很確定的自己的每一行程式是怎麼被計算機執行的;你清楚的知道什麼時候該用多執行緒什麼時候不該用;你清楚的知道自己的執行緒什麼時候該加鎖、什麼時候該等待,怎樣解決互斥問題,怎樣解決同步問題;

你清楚的知道自己的每一段程式碼大概可能會執行多長時間;你清楚的知道自己的每次函式呼叫從上層到底層是如何執行的,因此你很清楚該選擇使用什麼樣的函式,傳遞什麼樣的引數才能達到自己想要的效果;你清楚的理解計算機系統,因此發現剛剛在本文開頭立人設的小風說的都是你已經知道的東西。

上帝視角:程式設計師為什麼需要理解 CPU?

當你的程式出現問題後無頭蒼蠅般瞎試一通並期待自己的程式能奇蹟般正常工作時;當編譯器提示奇怪的錯誤時;當連結器莫名其妙的提示‘undefined reference to ***’時;當程式運

行起來就core時;

當程式執行一段時間被OOM kill掉時;當你的程式記憶體洩漏時;當你的程式莫明奇妙耗時非常高時;如果在這些時刻你能做的僅僅是等待別人來幫忙,那麼就不要說程式設計師不需要理解底層了。

說了這麼多,用一句話說就是理解底層的好處可以讓程式設計師在寫程式時獲得“上帝視角”,一切都逃不過你的法眼。

相關文章

頂部