多核時代:並行程序設計探討(2)——並行實現技術
並行程序設計探討(2)——並行實現技術
通過“並行程序設計探討(1)”的介紹,相信大家都已經對並行係統相關的概念有了初步的了解。不過看起來挺嚇人的,一堆的術語和概念,想起來頭就有點大!!
幸運的是真正需要進行並行程序設計的係統其實不多,我們來看看:
SISD:本質上決定了不可能是並行的;
SIMD:專有係統,相信絕大部分人都沒有接觸過;
MISD:沒有這樣的係統;
MIMD:本質上就是為了支持並行的。
因此,在處理並行程序設計的時候,我們其實隻要考慮MIMD這類係統就OK了!謝天謝地Orz!!:)
不過別高興的太早,MIMD也有很多啊,怎麼辦呢?MIMD分為共享內存和消息驅動(其實就是分布式內存)兩種,我們還是從分類上來稍加分析,看看如何處理。
共享內存:所有CPU共內存,所有CPU由一個操作係統控製的,例如Windows和Linux/UNIX,目前流行的多核、多CPU機器都是屬於這種;
消息驅動:其實就是分布式內存,CPU由不同的操作係統控製,不同的CPU之間通過網絡通信。例如網格Grid是通過因特網通信、集群Cluster是通過局域網通信、MPP是通過專有的高速網絡通信。
通過上麵的對比,聰明的讀者估計很快就想到了這兩種係統並行程序實現方式的差異:
共享內存:通過操作係統的多進程多線程來完成並行任務,通過進程間通信來完成協作;
消息驅動:通過多台機器來完成並行任務,通過消息來完成協作。(MPP物理上看是一台機器,邏輯上是多台機器)。
當然,由於消息驅動係統中每個處理單元都是一台獨立的機器,對這台獨立的機器本身當然也可以通過共享內存來實現並行處理。
嗯,非常不錯,經過我們的層層分析和篩選,原來各種各樣的看起來很嚇人的並行係統,最終被我們歸納總結出兩種並行實現技術:多進程多線程、多機協作。
套用侯捷大師的一句話給自己貼點金,正所謂:深入淺出!!
==========================未完待續,後麵介紹Window和Linux的多進程多線程===============================
最後更新:2017-04-02 03:42:36