今天給大家?guī)?lái)一篇?jiǎng)偎萍夹g(shù)文的非技術(shù)文。 最近陸陸續(xù)續(xù)寫了幾篇關(guān)于CPU的文章,可能有的同學(xué)會(huì)問,程序員寫代碼就好了,為什么需要去理解CPU啊?不嫌累?。堪?????你倒是說(shuō)啊。
計(jì)算機(jī)系統(tǒng) != 漢堡包
在之前的文章中我把計(jì)算機(jī)系統(tǒng)比作一個(gè)漢堡包,這個(gè)類比不太恰當(dāng),雖然漢堡包是層級(jí)結(jié)構(gòu),但它是上下對(duì)稱的,計(jì)算機(jī)系統(tǒng)的層級(jí)結(jié)構(gòu)顯然不是對(duì)稱的,你要說(shuō)披薩還差不多,注意是披薩,不是餡餅,因?yàn)轲W餅也是對(duì)稱的。
計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu)是上層基于下層,并且上層對(duì)外屏蔽下層,因此用洋蔥來(lái)比喻計(jì)算機(jī)系統(tǒng)是再恰當(dāng)不過(guò)了,這兩者都是層級(jí)結(jié)構(gòu),下層對(duì)上層都不可見,最妙的是,這兩者看時(shí)間長(zhǎng)了都會(huì)辣眼睛! 這種層級(jí)結(jié)構(gòu)保證了處于上層程序員無(wú)需理解下一層。
模糊的精確你的確不需要知道底層全部的微觀細(xì)節(jié),實(shí)際上我也不相信有誰(shuí)能全部知道,如果你太注重細(xì)節(jié),沒有對(duì)計(jì)算機(jī)系統(tǒng)的大局觀而是一頭扎到細(xì)節(jié)里,最終也只是徒勞,只挖掘細(xì)節(jié)很像是一種“模糊的精確”。
精確的模糊但是,如果你能知道底層的宏觀上的原理,情況就不一樣了,我把這種宏觀上的不那么細(xì)節(jié)的理解稱之為“精確的模糊”,老外有一個(gè)詞我認(rèn)為很貼切:The Big Picture。 程序員這一行,個(gè)人認(rèn)為精確的模糊要遠(yuǎn)好于模糊的精確,因?yàn)榍罢咭脒M(jìn)一步了解細(xì)節(jié)是很容易的(只是需不需要的問題),反之則非常困難。而且依靠這種精確的模糊已經(jīng)能解決很多問題,而后者則不能。
上帝視角每一個(gè)大家認(rèn)為的高手腦海里都有這樣一種精確的模糊(或者精確的精確,高手中的高手),ta可能不知道編譯器(解釋器)、鏈接器、操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧、CPU、內(nèi)存等等所有核心模塊的全部細(xì)節(jié),但是ta知道這些模塊“應(yīng)該”怎樣工作,當(dāng)你有了這種理解后,你會(huì)發(fā)現(xiàn): 你很確定的自己的每一行程序是怎么被計(jì)算機(jī)執(zhí)行的;
你清楚的知道什么時(shí)候該用多線程什么時(shí)候不該用;你清楚的知道自己的線程什么時(shí)候該加鎖、什么時(shí)候該等待,怎樣解決互斥問題,怎樣解決同步問題;你清楚的知道自己的每一段代碼大概可能會(huì)執(zhí)行多長(zhǎng)時(shí)間;
你清楚的知道自己的每次函數(shù)調(diào)用從上層到底層是如何執(zhí)行的,因此你很清楚該選擇使用什么樣的函數(shù),傳遞什么樣的參數(shù)才能達(dá)到自己想要的效果;
你清楚的理解計(jì)算機(jī)系統(tǒng),當(dāng)你的程序出現(xiàn)問題后無(wú)頭蒼蠅般瞎試一通并期待自己的程序能奇跡般正常工作時(shí);當(dāng)編譯器提示奇怪的錯(cuò)誤時(shí);當(dāng)鏈接器莫名其妙的提示‘undefined reference to ***’時(shí);當(dāng)程序運(yùn)行起來(lái)就core時(shí);
當(dāng)程序運(yùn)行一段時(shí)間被OOM kill掉時(shí);當(dāng)你的程序內(nèi)存泄漏時(shí);當(dāng)你的程序莫明奇妙耗時(shí)非常高時(shí);如果在這些時(shí)刻你能做的僅僅是等待別人來(lái)幫忙,那么就不要說(shuō)程序員不需要理解底層了。
編輯:jq
-
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217120 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7663瀏覽量
90825 -
程序
+關(guān)注
關(guān)注
117文章
3826瀏覽量
83003 -
編譯器
+關(guān)注
關(guān)注
1文章
1662瀏覽量
50232
原文標(biāo)題:程序員為什么需要理解 CPU?
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)
阿里云升級(jí)通義靈碼AI程序員,全面上線
TMS320C55x DSP CPU程序員參考補(bǔ)充

UCD3138A64/UCD3138128程序員手冊(cè)

深入理解C語(yǔ)言:循環(huán)語(yǔ)句的應(yīng)用與優(yōu)化技巧

機(jī)械革命發(fā)布CODE AI程序員本
汽車制動(dòng)系統(tǒng)原理解析 如何檢查汽車制動(dòng)系統(tǒng)
Linux驅(qū)動(dòng)程序程序員指南

AI編程工具會(huì)不會(huì)搶程序員飯碗
軟通動(dòng)力子公司鴻湖萬(wàn)聯(lián)助陣?guó)櫭?024程序員節(jié)成功舉辦

第五屆長(zhǎng)沙·中國(guó)1024程序員節(jié)開幕
CPU主要參數(shù)有哪些
CPU線程和程序線程的區(qū)別
技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:掌握程序結(jié)構(gòu)知識(shí)

評(píng)論