今天給大家帶來一篇勝似技術文的非技術文。 最近陸陸續續寫了幾篇關于CPU的文章,可能有的同學會問,程序員寫代碼就好了,為什么需要去理解CPU啊?不嫌累啊?啊?啊?你倒是說啊。
計算機系統 != 漢堡包
在之前的文章中我把計算機系統比作一個漢堡包,這個類比不太恰當,雖然漢堡包是層級結構,但它是上下對稱的,計算機系統的層級結構顯然不是對稱的,你要說披薩還差不多,注意是披薩,不是餡餅,因為餡餅也是對稱的。
計算機系統的結構是上層基于下層,并且上層對外屏蔽下層,因此用洋蔥來比喻計算機系統是再恰當不過了,這兩者都是層級結構,下層對上層都不可見,最妙的是,這兩者看時間長了都會辣眼睛! 這種層級結構保證了處于上層程序員無需理解下一層。
模糊的精確你的確不需要知道底層全部的微觀細節,實際上我也不相信有誰能全部知道,如果你太注重細節,沒有對計算機系統的大局觀而是一頭扎到細節里,最終也只是徒勞,只挖掘細節很像是一種“模糊的精確”。
精確的模糊但是,如果你能知道底層的宏觀上的原理,情況就不一樣了,我把這種宏觀上的不那么細節的理解稱之為“精確的模糊”,老外有一個詞我認為很貼切:The Big Picture。 程序員這一行,個人認為精確的模糊要遠好于模糊的精確,因為前者要想進一步了解細節是很容易的(只是需不需要的問題),反之則非常困難。而且依靠這種精確的模糊已經能解決很多問題,而后者則不能。
上帝視角每一個大家認為的高手腦海里都有這樣一種精確的模糊(或者精確的精確,高手中的高手),ta可能不知道編譯器(解釋器)、鏈接器、操作系統、網絡協議棧、CPU、內存等等所有核心模塊的全部細節,但是ta知道這些模塊“應該”怎樣工作,當你有了這種理解后,你會發現: 你很確定的自己的每一行程序是怎么被計算機執行的;
你清楚的知道什么時候該用多線程什么時候不該用;你清楚的知道自己的線程什么時候該加鎖、什么時候該等待,怎樣解決互斥問題,怎樣解決同步問題;你清楚的知道自己的每一段代碼大概可能會執行多長時間;
你清楚的知道自己的每次函數調用從上層到底層是如何執行的,因此你很清楚該選擇使用什么樣的函數,傳遞什么樣的參數才能達到自己想要的效果;
你清楚的理解計算機系統,當你的程序出現問題后無頭蒼蠅般瞎試一通并期待自己的程序能奇跡般正常工作時;當編譯器提示奇怪的錯誤時;當鏈接器莫名其妙的提示‘undefined reference to ***’時;當程序運行起來就core時;
當程序運行一段時間被OOM kill掉時;當你的程序內存泄漏時;當你的程序莫明奇妙耗時非常高時;如果在這些時刻你能做的僅僅是等待別人來幫忙,那么就不要說程序員不需要理解底層了。
編輯:jq
-
cpu
+關注
關注
68文章
10901瀏覽量
212668 -
計算機
+關注
關注
19文章
7534瀏覽量
88449 -
程序
+關注
關注
117文章
3795瀏覽量
81293 -
編譯器
+關注
關注
1文章
1642瀏覽量
49238
原文標題:程序員為什么需要理解 CPU?
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論