深入理解計算機系統(1.4)---並發與並行、淺談抽象


引言

          

           並發與並行一直是IT界炙手可熱的詞匯,相信各位猿友都不會陌生。在計算機系統這本書當中,對並發與並行的解釋是,並發是指一個同時具有多個活動的系統,而並行則是指的用並發使得一個系統運行的更快

           這與LZ之前的理解應該是不沖突的,在LZ之前看來,並發是一種模式,而並行是實現這種模式的手段之一。

 

線程級並發

 

           在進程的抽象概念下引入了線程,而線程級並發的概念,就是指的多個線程在同一時間(並非是絕對同時的)活動

           操作系統從單處理器,直到現在多核多處理器系統,乃至超線程技術,已經經歷了很大的變化。這也使得針對多線程編程變得更加重要,否則就無法利用多處理器帶來的好處。

           針對多處理器系統來說,比較好理解,其實就是物理上將多個CPU集中在一個集成電路的芯片上。而對於超線程技術來說,則是利用N個物理內核,模擬出2N個邏輯內核的技術。在硬件上來講,超線程需要CPU的某些部分有多個備份,比如寄存器和程序計數器,但是其它部分只有一份,比如ALU。

 

指令級並行

 

           在書中,對指令級並行的解釋是,如果處理器可以同時執行多條指令,則稱這種屬性為指令級並行。其實指令級並行就是利用了指令的執行過程中會有不同的階段,或者更精確的說,是在同一時間只會利用部分CPU的硬件,因此可以利用這一點做到多個指令並行執行。

           更好的情況下,現代的很多處理器能夠做到執行一條指令的平均時間尚且不到一個周期,這種處理器就稱為超標量處理器

 

單指令、多數據並行

 

           單指令、多數據的概念是指一條指令可以產生多個並行執行的操作的方式。當今的一些處理器中配備了特殊的硬件,可以達到這個效果。由於產生了多個並行執行的操作,因此就會涉及到多個數據,通俗的講也可以理解為,一條指令操作多個數據。比如書中所提到的例子,一些處理器具有並行地對4對單精度浮點數做加法的指令。

 

簡談抽象

 

           抽象的重要性就不需要再強調了,它在計算機科學領域有着不言而喻的地位。抽象可以使得一些具體的實現變的更加易於描述,而且也可以針對一些實現的方式作出規定

           舉個簡單的例子,就JAVA中的類來說,它其實是通過編譯器和JVM來實現的,而JVM本身又是一個抽象的概念,它也會有具體的實現。倘若針對我們平時使用的hotspot虛擬機來說,類的實現是將類的信息存放在永久代,而后將實例存放在堆中,並且在每一個實例中,都會存放一個類信息的引用。從而我們在操作這個實例的時候,會通過類信息確定我們所做的操作並執行它。

           以上是LZ對類實現的個人理解,對JVM不太熟悉的猿友們可能對這個描述比較迷惑。但是沒關系,你只需要知道class可以聲明一個類,並且在你創建了一個實例之后,使用實例名.方法名可以調用它的方法,實例名.變量名可以取得它的屬性值就可以了(在此簡單起見,忽略訪問權限限制)。這就使得我們操作類的時候變的簡單,也正是抽象的意義之一,也是上面對抽象描述的第一句話的解釋。

           對於后面一句就比較好理解了,JAVA虛擬機是一種抽象,有了這個抽象,我們就可以針對JAVA虛擬機制定規范,也就是JAVA虛擬機規范。

           

文章小結

 

           本次我們簡單了解了一下並發和並行的概念,以及抽象對於計算機科學的重要意義。

           下一章LZ將和各位猿友一起進入一個嶄新的世界,那里有很多1和0的數字,有很多定理與證明,因此這部分可能比較枯燥。如果LZ的解釋不能讓各位猿友更好的理解這本書的內容,各位猿友也可以看書中的原版內容,或者拿着書和LZ的文章對照着看都可以。不過LZ還是希望各位不要半途而廢,畢竟實踐雖然重要,但還是需要理論的支撐的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM