引言
并發(fā)與并行一直是IT界炙手可熱的詞匯,相信各位猿友都不會陌生。在計算機系統(tǒng)這本書當中,對并發(fā)與并行的解釋是,并發(fā)是指一個同時具有多個活動的系統(tǒng),而并行則是指的用并發(fā)使得一個系統(tǒng)運行的更快。
這與LZ之前的理解應該是不沖突的,在LZ之前看來,并發(fā)是一種模式,而并行是實現(xiàn)這種模式的手段之一。
線程級并發(fā)
在進程的抽象概念下引入了線程,而線程級并發(fā)的概念,就是指的多個線程在同一時間(并非是絕對同時的)活動。
操作系統(tǒng)從單處理器,直到現(xiàn)在多核多處理器系統(tǒng),乃至超線程技術(shù),已經(jīng)經(jīng)歷了很大的變化。這也使得針對多線程編程變得更加重要,否則就無法利用多處理器帶來的好處。
針對多處理器系統(tǒng)來說,比較好理解,其實就是物理上將多個CPU集中在一個集成電路的芯片上。而對于超線程技術(shù)來說,則是利用N個物理內(nèi)核,模擬出2N個邏輯內(nèi)核的技術(shù)。在硬件上來講,超線程需要CPU的某些部分有多個備份,比如寄存器和程序計數(shù)器,但是其它部分只有一份,比如ALU。
指令級并行
在書中,對指令級并行的解釋是,如果處理器可以同時執(zhí)行多條指令,則稱這種屬性為指令級并行。其實指令級并行就是利用了指令的執(zhí)行過程中會有不同的階段,或者更精確的說,是在同一時間只會利用部分CPU的硬件,因此可以利用這一點做到多個指令并行執(zhí)行。
更好的情況下,現(xiàn)代的很多處理器能夠做到執(zhí)行一條指令的平均時間尚且不到一個周期,這種處理器就稱為超標量處理器。
單指令、多數(shù)據(jù)并行
單指令、多數(shù)據(jù)的概念是指一條指令可以產(chǎn)生多個并行執(zhí)行的操作的方式。當今的一些處理器中配備了特殊的硬件,可以達到這個效果。由于產(chǎn)生了多個并行執(zhí)行的操作,因此就會涉及到多個數(shù)據(jù),通俗的講也可以理解為,一條指令操作多個數(shù)據(jù)。比如書中所提到的例子,一些處理器具有并行地對4對單精度浮點數(shù)做加法的指令。
簡談抽象
抽象的重要性就不需要再強調(diào)了,它在計算機科學領(lǐng)域有著不言而喻的地位。抽象可以使得一些具體的實現(xiàn)變的更加易于描述,而且也可以針對一些實現(xiàn)的方式作出規(guī)定。
舉個簡單的例子,就JAVA中的類來說,它其實是通過編譯器和JVM來實現(xiàn)的,而JVM本身又是一個抽象的概念,它也會有具體的實現(xiàn)。倘若針對我們平時使用的hotspot虛擬機來說,類的實現(xiàn)是將類的信息存放在永久代,而后將實例存放在堆中,并且在每一個實例中,都會存放一個類信息的引用。從而我們在操作這個實例的時候,會通過類信息確定我們所做的操作并執(zhí)行它。
以上是LZ對類實現(xiàn)的個人理解,對JVM不太熟悉的猿友們可能對這個描述比較迷惑。但是沒關(guān)系,你只需要知道class可以聲明一個類,并且在你創(chuàng)建了一個實例之后,使用實例名.方法名可以調(diào)用它的方法,實例名.變量名可以取得它的屬性值就可以了(在此簡單起見,忽略訪問權(quán)限限制)。這就使得我們操作類的時候變的簡單,也正是抽象的意義之一,也是上面對抽象描述的第一句話的解釋。
對于后面一句就比較好理解了,JAVA虛擬機是一種抽象,有了這個抽象,我們就可以針對JAVA虛擬機制定規(guī)范,也就是JAVA虛擬機規(guī)范。
文章小結(jié)
本次我們簡單了解了一下并發(fā)和并行的概念,以及抽象對于計算機科學的重要意義。
下一章LZ將和各位猿友一起進入一個嶄新的世界,那里有很多1和0的數(shù)字,有很多定理與證明,因此這部分可能比較枯燥。如果LZ的解釋不能讓各位猿友更好的理解這本書的內(nèi)容,各位猿友也可以看書中的原版內(nèi)容,或者拿著書和LZ的文章對照著看都可以。不過LZ還是希望各位不要半途而廢,畢竟實踐雖然重要,但還是需要理論的支撐的。