前言
Linux 的優(yōu)秀之處自然不必多說。
如果將操作系統(tǒng)比作一輛汽車,那 Linux 就是一輛性能出色的多功能越野車,上山下海飛天無所不能。
如果你擁有了它,一定不會(huì)只滿足于駕駛它上下班,不能只會(huì)掛擋、踩油門和控制方向之類的基本操作。我們想充分了解并掌握它,挖掘其更多潛能。但是,這個(gè)過程有相當(dāng)?shù)碾y度。
Linux 系統(tǒng)編程的難點(diǎn)
對(duì)于有一定 Linux 開發(fā)基礎(chǔ)希望進(jìn)階學(xué)習(xí) Linux 系統(tǒng)編程的開發(fā)人員來說,其難點(diǎn)在于,Linux 所囊括的技術(shù)點(diǎn)繁雜,往往不知從何下手。
對(duì)于稍有些系統(tǒng)編程經(jīng)驗(yàn)的 Linux 開發(fā)者來說,難點(diǎn)往往在于,缺乏對(duì)底層技術(shù)的透徹理解,而不能自如地把握和控制好系統(tǒng)的復(fù)雜行為,同時(shí),底層技術(shù)也經(jīng)常成為中級(jí)開發(fā)者晉升到高級(jí)職位的瓶頸。
技術(shù)繁雜,很難把握頭緒
Linux 內(nèi)容紛繁復(fù)雜,會(huì)讓學(xué)習(xí)者不知從何處下手。雖說 Linux 開放了所有設(shè)計(jì)圖紙,可如果將這些圖紙全部打印出來,可能要裝滿整個(gè)房間,即使號(hào)稱 Linux 源碼航海圖的《深入理解 Linux 內(nèi)核》圖書也有 800 多頁。如果毫無方向地從頭看起,看不了幾頁可能就昏昏欲睡了。
在我最開始接觸 Linux 系統(tǒng)開發(fā),還沒有多少真實(shí)項(xiàng)目經(jīng)驗(yàn)時(shí),就曾數(shù)次撲進(jìn) Linux 設(shè)計(jì)圖紙里,但每次都堅(jiān)持不了幾個(gè)月,然后帶著受傷的自信心慘敗而歸。
對(duì)于 Linux 開發(fā)者,這時(shí)如果能有一本 Linux 航海圖的閱讀指引,標(biāo)注出航海圖上寶藏的埋藏位置和寶藏簡介,一定可以讓學(xué)習(xí)過程更有方向性,也更加輕松愉悅。
不了解底層原理,難從根源解決問題
開發(fā)者在最初開發(fā) Linux 系統(tǒng)上的應(yīng)用和服務(wù)時(shí),往往會(huì)將大量精力傾注在實(shí)現(xiàn)業(yè)務(wù)需求上,對(duì)底層技術(shù)的實(shí)現(xiàn)細(xì)節(jié)并沒有特別深刻的理解。
但隨著系統(tǒng)復(fù)雜性的提高,開發(fā)人員只有對(duì)底層實(shí)現(xiàn)細(xì)節(jié)有越來越透徹的理解,才能更好地把握和控制系統(tǒng)的復(fù)雜行為。否則一旦遇到如下這些問題,將很難從根源上解決。
程序在某個(gè)位置出現(xiàn)間歇性崩潰,可當(dāng)我添加一行調(diào)試用的日志后,就再也沒崩潰過了,這背后到底是怎么回事呢?
我寫了一個(gè)多進(jìn)程模型的服務(wù)器,但總感覺新進(jìn)程啟動(dòng)地不干凈,有時(shí)會(huì)有些父進(jìn)程的東西摻和到子進(jìn)程里來??扇绻尭高M(jìn)程在啟動(dòng)子進(jìn)程之前做更多的計(jì)算,或者單純多等一會(huì),這種情況發(fā)生的概率便大大減少了,該系統(tǒng)的行為讓人有點(diǎn)捉摸不透,其背后的原因是什么呢?
我的信號(hào)處理程序與主程序使用同一個(gè)共享變量來交換信息,大多數(shù)時(shí)候都能正常工作,可總會(huì)時(shí)不時(shí)抽風(fēng)一下,代碼都已仔細(xì)檢查過,找不出任何邏輯上的問題。這讓人非??鄲?,到底是哪里出現(xiàn)問題了?
類似這種程序表現(xiàn)與預(yù)期不完全一致的情況會(huì)讓開發(fā)者非常頭疼,尤其是那種大部分時(shí)間表現(xiàn)正常,偶爾會(huì)“抽風(fēng)”的情況。這些令人頭疼的問題,我不止一次地經(jīng)歷過,數(shù)次被 Linux 傷害自信的感覺至今仍記憶猶新。
幸運(yùn)的是,在經(jīng)歷了多次探索、踩坑之后,Linux 系統(tǒng)的行為特點(diǎn)以及如此設(shè)計(jì)的內(nèi)在原因終于在我眼前逐漸明晰起來,這個(gè)系統(tǒng)內(nèi)部精巧的設(shè)計(jì)也越來越清晰地展現(xiàn)在我眼前。
如今,再回想那段在 Linux 世界中幾度迷失的經(jīng)歷,已經(jīng)能夠明確知道問題出在了哪里——還不知道它能做什么時(shí),便試圖弄清它是如何運(yùn)作的。正如還不知道一輛車發(fā)動(dòng)后如何前進(jìn),便開始研究發(fā)動(dòng)機(jī)、變速箱里的那一堆齒輪、聯(lián)動(dòng)部件,結(jié)果自然是事倍功半。
相信很多 Linux 開發(fā)者都曾經(jīng)或正在遭遇與我類似的痛苦經(jīng)歷。
-
控制系統(tǒng)
+關(guān)注
關(guān)注
41文章
6649瀏覽量
110755 -
Linux
+關(guān)注
關(guān)注
87文章
11332瀏覽量
210024 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9267瀏覽量
85799
原文標(biāo)題:Linux的確實(shí)挺復(fù)雜的
文章出處:【微信號(hào):嵌入式與Linux那些事,微信公眾號(hào):嵌入式與Linux那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論