序列計算機與平行計算 併發計算的比較

2021-10-02 04:56:50 字數 2959 閱讀 9242

原文**:從序列到並行,從並行到分布式

假設有ab兩個任務,則序列、並行、併發的區別如圖1所示。

序列

a和b兩個任務執行在乙個cpu執行緒上,在a任務執行完之前不可以執行b。即,在整個程式的執行過程中,僅存在乙個執行上下文,即乙個呼叫棧乙個堆。程式會按順序執行每個指令。

並行

並行性指兩個或兩個以上事件或活動在同一時刻發生。在多道程式環境下,並行性使多個程式同一時刻可在不同cpu上同時執行。比如,a和b兩個任務可以同時執行在不同的cpu執行緒上,效率較高,但受限於cpu執行緒數,如果任務數量超過了cpu執行緒數,那麼每個執行緒上的任務仍然是順序執行的。

併發

併發指多個執行緒在巨集觀(相對於較長的時間區間而言)上表現為同時執行,而實際上是輪流穿插著執行,併發的實質是乙個物理cpu在若干道程式之間多路復用,其目的是提高有限物理資源的執行效率。 併發與並行序列並不是互斥的概念,如果是在乙個cpu執行緒上啟用併發,那麼自然就還是序列的,而如果在多個執行緒上啟用併發,那麼程式的執行就可以是既併發又並行的。

而分布式和並行的區別如下:

分布式

分布式在並行處理的基礎上,強調任務正在執行的物理裝置,如處理器、記憶體等等硬體,在物理上是分開的。而平行計算是指在一台計算機上的計算,在物理上不分開。

假設有a,b兩個任務,任務a需要計算1-100000之間所有質數的和,任務b需要計算100001-200000之間所有質數的和

則採用序列的方法設計的程式如下:

public class main 

//序列計算

private static void serial()

time2=system.currenttimemillis();

system.out.println("1-100000之間質數和為"+count+" 耗時:"+(time2- time1) + "毫秒");

count = 0;

for(int i=100001;i<=200000;++i)

time3 = system.currenttimemillis();

system.out.println("100001-200000之間質數和為"+count+" 耗時:"+(time3 - time2) + "毫秒");

system.out.println("總耗時:"+ (time3 - time1) + "毫秒");

}//主函式

public static void main(string args)

}

在序列計算的程式中,只有乙個cpu執行緒,且該執行緒按順序執行ab兩個任務。程式執行結果如下:

採用併發的方法設計的程式如下:

public class main

public static void main(string args)

private static void serialconcurrency()

else if(task == 2 && j++<=200000)

else

}system.out.println("1-100000之間質數和為"+count1);

system.out.println("100001-200000之間質數和為"+count2);

system.out.println("總耗時:"+(system.currenttimemillis() - time) + "毫秒");}}

在併發計算的程式中,同樣只有乙個cpu執行緒,但是該執行緒會在ab兩個任務之間進行切換,可以發現,併發計算的總耗時反而大於序列計算,這是因為cpu在任務切換過程中需要消耗一定時間。程式執行結果如下:

採用並行的方法設計的程式如下:

public class main 

public static void main(string args) throws interruptedexception

time2 = system.currenttimemillis();

system.out.println("總耗時:"+(time2 - time1)+"毫秒");

}}class task implements runnable

public void run()

system.out.println(string.format("%d-%d之間質數和為%d,耗時:%d毫秒",start,end,count,(system.currenttimemillis()- time)));}}

在平行計算的程式中,ab任務各占用乙個cpu執行緒,ab任務同時執行,總共耗費的時間約等於ab任務的最長耗時,程式執行結果如下:

由上表可知並行的總耗時是最小的,效率最高(如果ab兩個任務耗時更接近,則平行計算的效率將更高)。但由於平行計算受限於cpu執行緒數,當計算量超出單台計算機的計算能力時,人們就開始考慮使用多台計算機同時處理乙個任務,分布式計算應用而生。分布式計算將任務分解成許多小的部分,分配給多台計算機進行處理,從而整體上節約了計算時間。hadoop的mapreduce就是一種分布式計算框架,我們之後會對mapreduce進行詳細的**。

併發計算 VS 平行計算

我在網上看到很多講併發計算與平行計算區別的文章,感覺很多講得不是很抽象就是不全面,因此我決定自己好好總結一下。閒話少說,先看一張圖。仔細看一下這張圖,先有個大概印象再繼續往下讀。loading 看完上面的圖之後,這是我總結的幾點 note 為了更好地比較並行與併發計算,我加入了序列計算。序列計算 平...

併發計算 VS 平行計算

並行 parallelism 是指在具有多個處理單元 如gpu或者多核cpu 的系統上,通過將計算或資料劃分為多個部分,將各個部分分配到不同的處理單元上,各處理單元相互協作,同時執行,已達到加快求解速度或者提高求解問題規模的目的。併發是乙個程式 演算法或者問題的可分解屬性,它由多個順序不依賴性或者區...

併發計算 平行計算 序列計算 分布式計算 概念簡述

併發計算 concurrent computing 多個任務在同一時間段內從開始執行到執行結束,在這段時間內,每乙個時刻都只有乙個程式執行,並且所有的任務都是在同乙個處理器上執行。序列計算 sequential computing 指的是多個程式在同乙個處理器上被執行,只有當當前的程式執行結束後,下...