最近公司指派任務,為平台3.0下一階段研發工作對PG進行研究,其實PG的移植工作一直由演算法部在負責,但是PG移植後的任務卻是擔當這整個平台軟體的底層資料存放區,交易處理,資料採礦等方面工作,所以就索性將這一快拿到了平台部來做。因為我所負責的RCP這部分在功能性上基本上也算是告一段落,目前主要就是帶帶新人,在架構型上進一些指導工作,而學習C語言對我來說有兩大好處:1.考試是需要考C和資料結構的;2.學習C語言能夠協助我理解程式在執行過程中的運行情況,能更清楚的瞭解電腦底層結構。
在近兩周對PG代碼的閱讀中對C和系統底層都有了更進一步的瞭解,就進程而言,以前根本不理解,只知道程式運行就需要一個進程,對進程包含那些東西,建立進程需要那些資源,都是毫無概念的,在閱讀PG代碼的過程中通過網上、書籍的查閱後,對進程有了進一步的瞭解。
學習C語言最難的無疑是指標,幾乎每一位C語言學習者在處理指標問題上都是傷透腦經的。因為你要真正搞懂C程式,你就必須知道指標所指向的內容是什嗎?是指向具體數值、是指向記憶體位址、數組、亦或是函數等等。因為指標是unsafe的,所以在開發的時候腦子裡一定要對記憶體結構有一個清晰的認識,否這就很有可能出現堆疊溢位的錯誤了。作為總結,那就把學習的經驗記下來,以後再次翻閱時也好有一個提示:在閱讀指標時首先從未定一標識符開始,遇到擴符變向解析,如此反覆,直至定義結束。
在PG這種多進程程式中,進程間是如何通訊的呢?我們都知道線程通訊可以採用互斥鎖來實現,那麼進程通訊如何?呢?在PG中是採用共用記憶體的方式實現的(還有沒有其他的方式我不知道),在主進程中建立記憶體虛擬檔案鏡像映射表,各個子進程通過同步訊號量來決定是否進入訪問共用記憶體,從而實現處理序間通訊的。
C語言中字串處理對我來說是一個大問題,在進階程式設計語言(C#、JAVA)中我可以輕鬆的採用StringBuilder或是String.Format()等方式來實現字串的拼接,而C中即便是處理這麼一個小小的字串拼接問題都會用到指標,相當頭痛。
唯一值得慶幸的是在經過N多天的努力後,終於將PG跑起來,並且能夠DEBUG了。