Linux 是一個非常優(yōu)秀的操作系統(tǒng)。如果將操作系統(tǒng)比作一輛汽車,那 Linux 就是一輛性能優(yōu)越的爬山王,上山下海飛天無所不能。
如果你能駕馭這輛爬山王,一定不會只滿足于駕駛它上下班,不能只會掛擋、踩油門和控制方向之類的基本操作。我們想充分了解并掌握它,挖掘其更多潛能。但是,這個過程有相當?shù)碾y度,但是你一旦能夠駕馭他就能夠享受其中的快樂。
01 / Linux 系統(tǒng)編程門檻
對于想學習 Linux 系統(tǒng)編程的開發(fā)人員來說,其難點在于,Linux 所囊括的技術(shù)點繁雜,往往不知從何下手,去買一本書來看發(fā)現(xiàn)有800頁看著看著就睡啦。
對于稍有些系統(tǒng)編程經(jīng)驗的 Linux 開發(fā)者來說,難點往往在于,缺乏對底層技術(shù)的透徹理解,而不能自如地把握和控制好系統(tǒng)的復(fù)雜行為,同時,底層技術(shù)也經(jīng)常成為中級開發(fā)者晉升到高級職位的瓶頸。
02 / 學校Linux需要指南針
Linux 發(fā)展到今天內(nèi)容非常多而且復(fù)雜,這給想接觸Linux的小伙伴來說不是一個好消息。雖說 Linux 開放了所有設(shè)計圖紙,可如果將這些圖紙全部打印出來,可能要裝滿整個房間,這估計得把好多人嚇退,即使號稱 Linux 源碼航海圖的《深入理解 Linux 內(nèi)核》圖書也有 800 多頁。如果毫無方向地從頭看起,苦海無邊回頭是岸。
在我最開始接觸 Linux 系統(tǒng)開發(fā),還沒有多少真實項目經(jīng)驗時,就曾數(shù)次撲進 Linux 設(shè)計圖紙里,但每次都堅持不了幾個月,每次在夜深人靜的時候就想起為什么受傷的都是我。
對于 Linux 開發(fā)者,這時如果能有一本 Linux 航海圖的閱讀指引,標注出航海圖上寶藏的埋藏位置和寶藏簡介,一定可以讓學習過程更有方向性,也更加輕松愉悅。
03 / 想要飛的更高必須的要,根基牢固
隨著時間的發(fā)展人們的需求越來越復(fù)雜,對開發(fā)人員的要求越越來越高,開發(fā)人員只有對底層實現(xiàn)細節(jié)有越來越透徹的理解,才能更好地把握和控制系統(tǒng)的復(fù)雜行為。否則一旦遇到如下這些問題,將很難從根源上解決。
程序在某個位置出現(xiàn)間歇性崩潰,可當我添加一行調(diào)試用的日志后,就再也沒崩潰過了,這背后到底是怎么回事呢?
我寫了一個多進程模型的服務(wù)器,但總感覺新進程啟動地不干凈,有時會有些父進程的東西摻和到子進程里來。可如果讓父進程在啟動子進程之前做更多的計算,或者單純多等一會,這種情況發(fā)生的概率便大大減少了,該系統(tǒng)的行為讓人有點捉摸不透,其背后的原因是什么呢?
我的信號處理程序與主程序使用同一個共享變量來交換信息,大多數(shù)時候都能正常工作,可總會時不時抽風一下,代碼都已仔細檢查過,找不出任何邏輯上的問題。這讓人非?鄲,到底是哪里出現(xiàn)問題了?
類似這種程序表現(xiàn)與預(yù)期不完全一致的情況會讓開發(fā)者非常頭疼,尤其是那種大部分時間表現(xiàn)正常,偶爾會“抽風”的情況。這些令人頭疼的問題,我不止一次地經(jīng)歷過,數(shù)次被 Linux 傷害自信的感覺至今仍記憶猶新。
幸運的是,在經(jīng)歷了多次探索、踩坑之后,Linux 系統(tǒng)的行為特點以及如此設(shè)計的內(nèi)在原因終于在我眼前逐漸明晰起來,這個系統(tǒng)內(nèi)部精巧的設(shè)計也越來越清晰地展現(xiàn)在我眼前。
如今,我已從事 Linux 開發(fā)近十年,再回想那段在 Linux 世界中幾度迷失的經(jīng)歷,已經(jīng)能夠明確知道問題出在了哪里——還不知道它能做什么時,便試圖弄清它是如何運作的。正如還不知道一輛車發(fā)動后如何前進,便開始研究發(fā)動機、變速箱里的那一堆齒輪、聯(lián)動部件,結(jié)果自然是事倍功半。