標籤:
本文轉載地址:http://www.cnblogs.com/zuoxiaolong/p/computer4.html
引言
並發與並行一直是IT界炙手可熱的詞彙,相信各位猿友都不會陌生。在電腦系統這本書當中,對並發與並行的解釋是,並發是指一個同時具有多個活動的系統,而並行則是指的用並發使得一個系統啟動並執行更快。
這與LZ之前的理解應該是不衝突的,在LZ之前看來,並發是一種模式,而並行是實現這種模式的手段之一。
線程級並發
在進程的抽象概念下引入了線程,而線程級並發的概念,就是指的多個線程在同一時間(並非是絕對同時的)活動。
作業系統從單一處理器,直到現在多核多處理器系統,乃至超執行緒技術,已經經曆了很大的變化。這也使得針對多線程編程變得更加重要,否則就無法利用多處理器帶來的好處。
針對多處理器系統來說,比較好理解,其實就是物理上將多個CPU集中在一個整合電路的晶片上。而對於超執行緒技術來說,則是利用N個物理核心,類比出2N個邏輯核心的技術。在硬體上來講,超執行緒需要CPU的某些部分有多個備份,比如寄存器和程式計數器,但是其它部分只有一份,比如ALU。
指令級並行
在書中,對指令級並行的解釋是,如果處理器可以同時執行多條指令,則稱這種屬性為指令級並行。其實指令級並行就是利用了指令的執行過程中會有不同的階段,或者更精確的說,是在同一時間只會利用部分CPU的硬體,因此可以利用這一點做到多個指令並存執行。
更好的情況下,現代的很多處理器能夠做到執行一條指令的平均時間尚且不到一個周期,這種處理器就稱為超標量處理器。
單指令、多資料並行
單指令、多資料的概念是指一條指令可以產生多個並存執行的操作的方式。當今的一些處理器中配備了特殊的硬體,可以達到這個效果。由於產生了多個並存執行的操作,因此就會涉及到多個資料,通俗的講也可以理解為,一條指令操作多個資料。比如書中所提到的例子,一些處理器具有並行地對4對單精確度浮點數做加法的指令。
簡談抽象
抽象的重要性就不需要再強調了,它在電腦科學領域有著不言而喻的地位。抽象可以使得一些具體的實現變的更加易於描述,而且也可以針對一些實現的方式作出規定。
舉個簡單的例子,就JAVA中的類來說,它其實是通過編譯器和JVM來實現的,而JVM本身又是一個抽象的概念,它也會有具體的實現。倘若針對我們平時使用的hotspot虛擬機器來說,類的實現是將類的資訊存放在永久代,而後將執行個體存放在堆中,並且在每一個執行個體中,都會存放一個類資訊的引用。從而我們在操作這個執行個體的時候,會通過類資訊確定我們所做的操作並執行它。
以上是LZ對類實現的個人理解,對JVM不太熟悉的猿友們可能對這個描述比較迷惑。但是沒關係,你只需要知道class可以聲明一個類,並且在你建立了一個執行個體之後,使用執行個體名.方法名可以調用它的方法,執行個體名.變數名可以取得它的屬性值就可以了(在此簡單起見,忽略存取權限限制)。這就使得我們操作類的時候變的簡單,也正是抽象的意義之一,也是上面對抽象描述的第一句話的解釋。
對於後面一句就比較好理解了,JAVA虛擬機器是一種抽象,有了這個抽象,我們就可以針對JAVA虛擬機器制定規範,也就是JAVA虛擬機器規範。
文章小結
本次我們簡單瞭解了一下並發和並行的概念,以及抽象對於電腦科學的重要意義。
深入理解電腦系統(1.4)---並發與並行、淺談抽象