串行(Sequential)、并發(fā)(Concurrent)饭玲、并行(parallel)與分布式(distributed)
Posted on 2011/12/28 by erlv
這幾個概念是談到并行時侥祭,經(jīng)常遇到的。說實話茄厘,自己一直不是特別的清楚矮冬,這篇文章就對這幾個概念進行區(qū)分。
Table of Contents
1 串行(Sequential)
2 并發(fā)(Concurrent)
3 并行(parallel)
4 分布式(distributed)
5 《編譯點滴》評
1 串行(Sequential)
串行程序中蚕断,程序會順序的執(zhí)行每一條指令欢伏,在整個程序的運行過程中,僅存在一個運行上下文亿乳。即一個調(diào)用棧硝拧,一個堆。
不存在多個運行上下文葛假。
在傳統(tǒng)的命令式語言中障陶,如C/C++,F(xiàn)ortran聊训,Java抱究,C#之類,串行執(zhí)行是根基带斑。
2 并發(fā)(Concurrent)
并發(fā)是指鼓寺,程序在運行的過程中存在多于一個的執(zhí)行上下文勋拟。這些執(zhí)行上下文一般對應著不同的調(diào)用棧。
并發(fā)概念的出現(xiàn)妈候,主要有幾個方面的原因:
為了更好的反應問題本身的結(jié)構(gòu)敢靡。比如圖形程序、服務器程序需要同時記錄多個任務的運行情況苦银。
所以啸胧,需要同時存在多個上下文。
為了利用更多的處理器提升性能幔虏。
這個是大家都了解的纺念,這里就不詳述了。
為了更方便的應對獨立的物理設備想括。比如陷谱,Google的搜索任務要一堆的機器協(xié)作完成的。
因此需要同時在每個機器上都有一個程序的上下文運行環(huán)境主胧。
3 并行(parallel)
在單處理器上叭首,并發(fā)程序雖然有多個上下文運行環(huán)境习勤,但某一個時刻只有一個任務在運行踪栋。
但在多處理器上,因為有了多個執(zhí)行單元图毕,就可以同時有數(shù)個任務在跑夷都。
這種物理上同一時刻有多個任務同時運行的方式就是并行。
和并發(fā)相比予颤,并行更加強調(diào)多個任務同時在運行囤官。
而且并行還有一個層次問題,比如是指令間的并行還是任務間的并行蛤虐。
4 分布式(distributed)
分布式在并行處理的基礎上党饮,強調(diào)任務正在執(zhí)行的物理設備,如處理器驳庭、內(nèi)存等等硬件刑顺,在物理上是分開的。
5 《編譯點滴》評
后三個概念涵蓋的范圍是:并發(fā)>并行>分布式饲常。
雖然串行限制了一個棧蹲堂、一個堆,一個運行上下文贝淤,處理器只能死板的按照指令的序列執(zhí)行柒竞。
但,當有多個棧播聪,多個運行上下文時朽基,就有了很多有趣的做法布隔,可以去應對很多有趣的問題。
并行就意味著多個處理器運行多個進程稼虎。程序怎么寫执泰?bug怎么調(diào)?進程怎么通信渡蜻?等等很多有意思的問題都一下子冒了出來术吝。
希望能有機會和大家一起學習學習:)