1. 程式人生 > >讀書筆記第二周《程序員的自我修養》

讀書筆記第二周《程序員的自我修養》

計算機軟件 執行文件 原子性 了解 位與 結構 等待時間 安全 class

讀書筆記第二周
《程序的自我修養》

??剛看到書名的時候以為這是一本講述程序員為人處世,享受生活的文章,當我抱著當小說看消遣的心情從群裏下載下來的時候,卻發現這實際上是一本幹貨滿滿的書。當我看到副標題——鏈接,裝載與庫, 我意識到這會是一本讓我受益匪淺的書,因為我沒有選修過操作系統,編譯原理相關的課程,對於代碼 是如何在電腦上跑起來的是毫無概念的,每次配置環境變量,配置鏈接庫,都是一頭霧水。而且我認為要成為一個優秀的程序員 ,僅僅滿足於代碼能運行是遠遠不夠的,只有對背後的運行機制有所了解,才能寫出優秀的代碼。

??我決定多花些時間細讀一下這本書,讀書筆記也按書的章節來記錄。

溫故而知新

??文章先從筆記本硬件談起,講述了人們為了讓計算機變得更加高效,計算機體系結構的改變,南北橋的出現, 器件間通訊協議的更叠,cpu頻率出現天花板後,多核處理器的誕生。並闡述了多核在處理耦合度較低的 的多任務時的優越性,如數據庫,服務器處理大量並發請求時。

??緊接著又講述了計算機軟件體系結構的一些知識,如中間層重要性,層與層之間通過 接口進行進行通信,如應用程序與運行庫之間的應用程序編程接口,運行庫與操作系統間的系統調用接口。 操作系統與硬件之間硬件規格接口。

??接下來講述人們是如何壓榨計算機CPU,內存,磁盤,io的潛力的。 對於cpu人們發明了分時系統並演變到後來的多任務系統,進而出現進程,優先級,搶占,超時暫停的概念, 操作系統可以使cpu在各進程之間快速切換,表現出同時處理的假象。

??對於內存的使用也利用中間層的概念,利用分段分頁解決隔離,定位與效率的問題。

??接下來是我非常感興趣的一個概念,線程。定義為程序進行最小單元,可以共享同一進程的的內存以及其他資源, 多線程可以利用等待時間,如等待網絡響應,或者一個線程用來計算,另一個用來計算。收獲較大的是進程安全這一小節,之前沒有遇到過。、 通過對數據訪問上鎖,保證線程訪問的原子性。對於可重入函數的描述更是讓我意識到了const變量的作用,以及編譯器優化可能帶來的問題。

靜態鏈接

?? 在此之前我對編譯鏈接的過程其實是沒有多少概念的。

?? 程序運行先是預處理,會對#開頭的指令進行一些操作。如展開宏定義,處理條件編譯指令,刪除註釋

?? 接著就是編譯過程,生成匯編代碼文件。

?? 鏈接過程將目標文件進行鏈接生成可執行文件。

??在上敘過程中,編譯器的作用是將高級語言翻譯成機器語言,高級語言寫法與硬件無關,可以更註重邏輯本身。並且中間代碼的存在可以讓編譯器分為前端與後端從而減小編譯器開發的工作量。 但是編譯完成後,一些變量和函數定義在其他模塊中,這些東西的地址就必須經過目標文件的鏈接才能最終確定。書中花了大量時間講述這一概念的由來,並把這鏈接過程形象的比喻為拼圖。

?? 以上就是本周看的一些東西,相比較於晦澀的專業書籍,這本書還是相當好讀的,下周會繼續往下讀。

讀書筆記第二周《程序員的自我修養》