引言
并發(fā)與并行一直是IT界炙手可熱的詞匯,相信各位猿友都不會陌生,。在計算機系統(tǒng)這本書當(dāng)中,對并發(fā)與并行的解釋是,,并發(fā)是指一個同時具有多個活動的系統(tǒng),,而并行則是指的用并發(fā)使得一個系統(tǒng)運行的更快。
這與LZ之前的理解應(yīng)該是不沖突的,,在LZ之前看來,,并發(fā)是一種模式,而并行是實現(xiàn)這種模式的手段之一,。
線程級并發(fā)
在進(jìn)程的抽象概念下引入了線程,,而線程級并發(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í)行一條指令的平均時間尚且不到一個周期,這種處理器就稱為超標(biāo)量處理器,。
單指令,、多數(shù)據(jù)并行
單指令、多數(shù)據(jù)的概念是指一條指令可以產(chǎn)生多個并行執(zhí)行的操作的方式,。當(dāng)今的一些處理器中配備了特殊的硬件,,可以達(dá)到這個效果。由于產(chǎn)生了多個并行執(zhí)行的操作,,因此就會涉及到多個數(shù)據(jù),,通俗的講也可以理解為,一條指令操作多個數(shù)據(jù),。比如書中所提到的例子,一些處理器具有并行地對4對單精度浮點數(shù)做加法的指令,。
簡談抽象
抽象的重要性就不需要再強調(diào)了,,它在計算機科學(xué)領(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ā)和并行的概念,以及抽象對于計算機科學(xué)的重要意義,。
下一章LZ將和各位猿友一起進(jìn)入一個嶄新的世界,,那里有很多1和0的數(shù)字,有很多定理與證明,,因此這部分可能比較枯燥,。如果LZ的解釋不能讓各位猿友更好的理解這本書的內(nèi)容,各位猿友也可以看書中的原版內(nèi)容,,或者拿著書和LZ的文章對照著看都可以,。不過LZ還是希望各位不要半途而廢,畢竟實踐雖然重要,,但還是需要理論的支撐的,。