進程是操做系統對一個正在運行的程序的抽象,即操做系統爲該進程虛擬了獨自的處理器資源,內存空間(又稱虛擬地址空間)與磁盤空間
線程是進程中多個能夠派遣的工做單位(或稱執行單元,以CPU的角度來看)的集合,同一進程的多個線程共享該線程的資源(包括運行時在虛擬地址空間加載的代碼,全局數據等)
併發(concurrency)從最終用戶的角度來看,就是同時運行多個本地應用程序(或者網絡應用程序例如 web服務器 同時處理來自多個遠程用戶的頁面請求 / 活動鏈接 的過程)
併發 從計算機底層實現原理來看,是CPU等硬件 在操做系統所抽象出來的多個進程(或線程)之間快速來回切換執行的過程;具體講,某一極短期間隔內,CPU只能執行一個進程(或線程)
超線程(hyper threading,HT)也稱「同時多線程」(simultaneous multi-threading)
採用超線程技術的多核CPU的任意一個物理核心在某一極短期間隔內能夠「同時」執行兩個或多個線程
例如傳統的單線程CPU,在某一極短期間隔內只能執行一個線程,單線程CPU在不一樣線程間切換須要20,000個時鐘週期
超線程多核CPU的任意一個物理核心在不一樣線程間切換隻須要一個時鐘週期;
典型的例子是 Intel Core i7 四核心處理器,一個物理核心能夠同時執行兩個線程,
總共能夠「並行」執行8個線程,等效於 擁有8個物理核心的單線程處理器(這種處理器應該沒有吧?)
這也是許多硬件檢測軟件(驗機軟件,如everest等)將其視爲8個邏輯核心的緣由:即多出的4個邏輯核心是經過超線程技術虛擬出來的
CPU在同一進程內的不一樣線程間切換速度比在不一樣進程間的切換速度快;
採用多線程編程技術的程序能夠充分發揮出多核CPU的「指令級並行執行」優點,從而達到「線程級併發運行」的效果
並行(parallelism)的一個比較有實質意義的概念爲「指令級並行」,是指CPU硬件同時執行多條指令的屬性;
一個具體實現爲 SIMD(Single Instruction Multiple Data stream,即單指令多數據流)
是一種單條指令同時控制多個數據並行運算,加速CPU在多媒體方面處理速度的技術,Intel 早期 Pentium CPU採用的MMX指令集就是SIMD技術的一種實現,
具體講,能夠同時執行4條單精度浮點數(即 C 數據類型 float )的加法運算指令,無該技術的CPU一次只能執行1條加法運算指令
SSE(Streaming SIMD Extensions,即「流式」單指令多數據流「擴展」)從字面意義就能夠了解它是SIMD技術的「流式擴展」版本;
SSE1指令集在MMX指令集的基礎上增長70條用以「並行」處理多媒體與3D圖形方面的指令;
此後的SSE2,SSE3等新增的指令條數愈來愈多,但無非是加強CPU在多媒體,3D圖形圖像,網絡數據流方面的處理速度