文章出處

  因為自己還在出差中,沒時間深入學習,最近工作里又有對一些技術的思考,所以這里記錄下來,等回去有時間可以按照這個思路進行學習,這里主要起到備忘的作用。

  1.線程難學難在我們沒有理解操作系統里的線程設計機制,最近我學習了兩個關于線程設計的原理,一個是分時系統里線程是按照時間片進行執行的,可是多線程里大部分線程都不能在一個時間片里全部執行完畢,那么時間片就要輪換,這里其實還有個問題就是存放線程的隊列是如何設計的,輪換線程時候它有何種算法。當操作系統是單核時候也許理解這些很容易,那么當操作系統是多核時候,問題來了,操作系統又是如何在多核環境下調度線程的呢?而且現在的服務器基本都是多核的,這個問題需要好好研究下。

  2.程序執行都是內存和CPU共同作用的結果,線程安全問題就是一個線程執行完時間片之后,其實它并沒有結束,而是休眠起來等待下一次的調度,這個時候內存的數據是被處理一部分或者說這些數據還沒算完,如果說另外一個線程再去操作了這些數據就有可能導致內存數據發生變化,從而導致最終結果出錯,這就是線程安全問題,所以一般線程安全問題的解決方案就是給數據上鎖,這個鎖只會被一個線程擁有,那么當時間片輪換時候,其他線程碰到這個加鎖的數據就會停止操作。所以在java里鎖都是設置在Object對象上,也就是鎖都是加在數據上。現在的jdk里對數據加鎖更加細粒度話,這個細粒度是何種原理設計的,這個需要好好研究。

  3.原子操作就是指不會被時間片打斷的操作,換個說法就是CPU在一個時間片下一定要執行完畢的操作,其本質就是CPU里一個不可分割的算子,基礎數據類型的操作往往都是原子操作例如int的加減乘除,但是java現在把很多復雜對象也做成這樣了,這個問題就需要我回去細細分析,這些對象的原子類到底是CPU擁有的復雜算法了?還是講鎖直接封裝在了對象上了。

  4.多核編程里有一點是可以肯定的,那就是多個核心的CPU是可以并行處理的,所以多核CPU才有真正的并行操作,但是問題來了,CPU可以多核,內存可不是多核啊,那么這個時候給內存數據加鎖,以及原子操作會有何種變化。單核系統的并行操作是一個偽并行,但是多核的并行有可能是真并行,那么這個時候真正并行的內存訪問同一份數據就會有問題,這個細節我現在實在不清楚,需要抽時間好好研究下。此外我們編寫程序有的對象是專門存儲數據,其實算法例如循環,分支也是會被存儲在內存里,告訴CPU該如何計算,那么這些不同類型的存儲數據到底在內存里該如何分配了,它們到底是何種類型,這個就需要我進一步研究jvm的內存模型,自己能提出這個問題很重要,我能感受到這個問題也就說明我不再是糊里糊涂的去看jvm的相關知識了。

  5.聽朋友說一些高級的CPU還有超線程技術,可以模擬單核真并發,這個也需要研究下。

  6.關于線程調度機制,單核下或許我并不想深究這個問題,但是多核下的調度呢?如果我們不能理解多核調度,那么寫出優秀的多核多線程會有什么隱患呢?

  7.關于IO的問題,IO,內存和CPU這三者的效率相比,IO實在慢的太多,當程序需要很高效率,同時又是IO密集型操作,那么處理IO,內存和CPU關系就會顯得尤為重要,我最近發現IO難學其實和線程難學是一直的,要理解深入IO就的深入了解操作系統的IO操作原理,例如IO多路復用,selector,poll,epoll,我最近想抽點時間先查閱下相關資料。

  以上都是備忘之需。最后聊下現在心情,壞心情:實在討厭出差,特別是到現在還不知道啥時候能回家的出差,每次都覺得下星期能回,現在感覺估計11月都回不了了,等以后有機會一定找個不出差或者少出差的工作。

  好心情:每天都要看看新聞,希望武漢越來越好,最近發現武漢房子買的越來越好,這就說明很多外來人口來武漢,我想如果武漢能保持這樣勢頭,武漢的未來一定不錯,武漢不錯,我這樣的大頭百姓也會有更多機會了。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()