天天看點

并發,并行?實體支援?

     今天在實踐中遇到了一個多線程的問題,盡管這個問題已經被自己想了不知道多少遍,查了多少次資料。  但是每次碰到依然是傻傻分不清楚的狀态。     今天又瘋狂的轉了下牛角尖。。  因為之前在看java源碼篇,關于java的thread類有過一些檢視,但是很多的源碼核心都是c或者c++ 實作的。 是以也就沒查到。   

      我經常聽的較多的是  多線程并發,并發程式設計,多線程程式設計等等。。。

       并發與并行,從文字上來分析,還真不好分析,特容易混。。

       網上很多大牛舉得例子很形象,也很好懂 。。 我也想自己舉一個:

           并發:  當我們打絕地求生跑毒的時候,經常會一邊跑,一邊  alt 切換視角。   從視角方面,我們每一個特定的時間都盯着某一個視角,不可能說又看着前面又看着側面。。  就算擺兩個電腦螢幕也是這樣,因為眼球的注意力不好分散。。。當然經過特殊訓練應該也可以實作。。

           并行:  任然是跑毒的時候,我們跑步的這個動作,與我們看視野的這個動作就是同時執行。。 我們不是停下來看一下視野,然後又跑,又看。。。   當然如果從動畫幀的角度了解,情況可能會有些不一樣。。 

            是以,至少我長期了解的多線程是并行的意思。。 而非并發。。

       了解一個知識,了解它的曆史顯得很有必要:

           硬體曆史:   

               cpu方面,1942第一台計算機問世,應該是沒有cpu一說吧。。  因為當時的使用的電子管,一個計算機相當于一個樓房。

                                1947年12月16日,美國紐澤西州墨累山的貝爾實驗室裡,世界上首顆半導體問世。。

                                 1971年,世界上第一塊微處理器4004在Intel公司誕生。 具有2300個半導體,應該是八位的(同時期發生的技術變革:c語言同時期發明,早一年的1969年 fortran語言,為進階程式語言奠基;同年,unix作業系統誕生;1971,第一個電子郵件誕生,在更早的圖靈時代,人工智能便已經開始萌芽,并提出圖靈測試40年代,中間還出現的語言有: Lisp,語言編譯器已經疊代了兩個版本好像)。

                              1978年,Intel公司首次生産出16位的微處理器命名為i8086。  現在很多的單片機課上就是這個。。

                              1985年Intel推出了80386晶片,以i3處理器而出名,32位,具有跨時代的意義。(再過幾年,貌似1989年,html就該誕生了。。咳咳。。)。

                               2002年,2004年,2006年左右把,奔騰系列提出的超線程技術,算是多線程并行的雛形了。。剛剛看資料貌似是2004的奔騰4吧?  懶得去翻了。。大差不差吧。。2006出現雙核處理器。

                              2011, 2012,2013年左右,酷睿系列64位處理器問世。。    位數的每一次變化是質的,此外,針對不同的緩存的支援性能提升是顯著的。。

               技術方面:

                      1976,首次出現多線程并發,并發,并發!   單處理器上的并發。

                      2004年左右,出現超線程技術,有點并行的意思了。

                      2006年左右,多處理器的出現。

                      酷睿系列大都支援超線程技術,搭配多核心處理器。   出現疊代原因據說是在2013年左右,摩爾定律失效,處理器性能達到瓶頸。。

     這些都是在網上搜的資料,加上自己亂七八糟的了解拼湊在一起。

     然而這些都太過理論化了!!  并不是我想要的結果。  盡管我絞盡腦汁的措辭,仍然百度不到我想要的資訊。

     我大體的疑問是:

           1.多線程并行(不是并發哈!!),實體上如何給予支援。   進階程式語言,或者說彙程式設計式如何與硬體打交道,硬體如何支援?   怎麼展現?    如果有大牛比較懂底層,将彙程式設計式拿來分析一通是最有說服力的,但是非常可惜的是并麼有找到答案。。  可能是太過于底層了,或者說對非硬體人員來說太隐蔽了!

繼續閱讀