這週看了好幾本書的部分,先是跳著看的《程式設計高手箴言》的前三章,然後看了一點《stl原始碼剖析》,之後後買了一本《深入理解計算機系統》第三版(又貴了),豆瓣評分9.7,應該是計算機技術方面評分最高的一本書籍了,原以為會偏體系機構,作業系統之模擬較底層的東西,沒想到後面每一章節居然都是從底層結構講起,以切實**的注意細節結束,花的值啊!看的是程式優化一章雖然還沒完但是收穫頗豐,也下定決心今年一定把這本書細緻的讀一下。下面還是把收穫大體寫一下。
第三章講到是windows執行機理,前面都沒怎麼看懂,一直讀到訊息處理機制才算略有收穫,講解了32位與16位windoows訊息執行方式的不同,我理解的是32相比16位,系統的vxd與底層更融合了,實現了程式的獨立,簡化了訊息處理的複雜度。具體運作方式中,使用getmessage 獲取訊息,sendmessage將訊息放入相應視窗的訊息佇列中,user便會呼叫註冊在視窗類中的視窗訊息處理函式對訊息進行處理。我感覺可以這麼理解,訊息就是含有視窗標誌資訊(id)以及含有事件資訊(滑鼠點選還是某個鍵點選之類的)的資料結構,在具體的處理函式中,只需要對資訊進行判別就可以完成相應的功能。 -
後面覺得還挺有意思的就是執行緒同步了,因為沒有學過相關的課程,只是有一點執行緒鎖的概念。
先是講解了乙個creatrhread建立closehandle關閉是否真的會導致記憶體洩漏的問題,原來是因為執行緒呼叫函式庫的時候,庫中會有全域性變數,也因此在建立工程的時候,系統會提示用多執行緒的庫還是單執行緒的庫,因此如果用錯庫的話很容易引起錯誤,因此微軟就在建立執行緒的時候繫結乙個資料結構將用到的全域性變數包含起來使其與執行緒相關,使得變數與執行緒相關,(查到這個資料結構叫做tiddata結構),但是這樣執行緒建立時間之類的資訊依舊無法獲得,因為windows api是靜態庫,因此就有了-beginthread函式創造執行緒,但是closehandle並不會釋放這個結構,就造成了記憶體洩漏。 綜上,假如你執意要用creatthread建立執行緒,那麼就應該知道此時庫函式中有變數是全域性的,為了避免錯誤,應該避免使用庫函式,否則就老老實實的用-beginthread與-endthread。 再之後正式講解執行緒同步機制,win32api中給了四個同步物件,evevt(事件),seqmaphore(訊號器),mutexes(互斥),critical section(臨界段)
evevt給與了執行緒之間高效的協作機會,例如乙個執行緒(1)想要使用另乙個執行緒(2)的排序結果,便可以在(1)中使用 createvevt獲得乙個控制代碼,然後用waitforsingleobject選定事件柄,與暫停週期,然後就被掛起,在(2)排序結束後,呼叫setevent來喚醒(1),這樣就避免了(2)排序是時候(1)一直執行導致占用cpu計算資源。
semaphores,這個在我理解中就是乙個資源使用的限制,比如設定只有20個可以使用,那麼執行緒申請資源的時候,數目少於20,就個數++,申請成功,否則執行緒就被掛起。具體流程大概就是creatsemaphore獲得乙個handle給semaphores,然後執行緒呼叫資源的時候就用waitforsingleobject申請,是否掛起就決定於資源執行緒使用數目是否超出semaphore中的最大值。
mutexes基本就是semaphores個數為1的情況。
critical section,它基本就是同乙個程序中線程執行**時候的互斥,具體是使用乙個叫做critical——section型別的全域性變數,執行緒呼叫entercriticalsection進入臨界段,假如有其他執行緒已經進入,執行緒就會被掛起。
沒想到一本書就寫了這麼多,準備《深入理解計算機系統》再讀一些放到下週讀書筆記吧。
其次準備了解一下計算機底層到底是如何處理執行緒程序的,然後清明找一些多執行緒程式設計的書讀一下,應該下週製作ui的時候會用到吧,顯示倒計時什麼的。
第五周讀書筆記
高效程式的奧秘 讀後感 一 這周開始了 高效程式的奧秘 為什麼選擇這本書作為這次讀書筆記的內容,是因為在上一次的個人作業中,我自己編寫程式的低效,給我留下了深刻的印象,乙個170mb的資料夾下檔案詞數的統計,竟然要花上10分鐘的時間 這還是我調整了資料結構的情況下 在調整之前,甚至程式無法執行完畢,...
梁肇新《程式設計高手箴言》讀書筆記(一)
將近期末,一直都比較忙,沒時間更新blog 之前在圖書館找到這本梁肇新的 程式設計高手箴言 很興奮,因為第一次看到這本書的時候是初中。當然,那時根本看不懂。現在重新拿起這本書有了一種全新的感覺。當然,這本書已經有點時日了,很多理念只能代表梁肇新的那個年代。之前看過雲風的 我的程式設計感悟 那本要新一...
《創新者》讀書筆記 第五周讀書筆記
創新者一書,實際上是這連個世界以來資訊科技的編年史,注重介紹了歷史潮流中的創新者,但這不意味著作者宣揚個別天才帶領了技術的進步,相反,作者強調了創新者所處環境對其的影響,在創新中的作用,展現了那些天才創新者的必然。作者想要揭示的是 科技革命不是一兩個天才的成就,而是一群人的努力,創新的起源不是乙個簡...