詳解併發和並行意義

參考網址:https://blog.csdn.net/qq_27825451/article/details/78850336編程

  

不少人不是特別明白併發編程和並行編程的區別所在,有不少人很容易搞混淆,以爲兩者近似相等,本文將用幾個淺顯易懂的例子,來講明一下什麼是併發和並行。網絡

一、任務與多任務多線程

       關於什麼是進程,什麼是線程,這裏不打算多說,關於每一種開發語言的多線程處理技術語法上有所區別,原理不少相似,能夠查閱相關的參考書。什麼是任務呢?其實很簡單,在咱們生活中,好比我今天要學一首歌,要在操場上散步1000米,而後還要向老師電話彙報研究成果,這是今天的三個任務。在編程語言中,實現某一個任務的通常單元就是「函數」。併發

二、順序執行異步

      上面三個任務,若是在通常的單線程執行的程序裏面,分別定義三個函數,而後依次順序執行,即執行完第一個在執行第二個,而後執行第三個,即我先把一首歌學會,而後在操場上散步1000米,而後再給老師彙報,這樣作效率低下。咱們能夠有一個更加高效的辦事方法,我在散步的時候,順便打電話給老說彙報一下今天的成果,而後邊散步邊聽歌,便跟着學,這樣效果就高不少,這裏的是「並行執行」。編程語言

三、併發和並行的一些理解——concurrency  and  parallellism分佈式

      併發和並行都是完成多任務更加有效率的方式,但仍是有一些區別的,併發(concurrency),並行(parallellism),可見他們的確是有區別的。下面經過一些具體的例子進行說明。函數

      例子一:oop

          假設一個有三個學生須要輔導做業,幫每一個學生輔導完做業是一個任務
            順序執行:老師甲先幫學生A輔導,輔導完以後再取給B輔導,最後再去給C輔導,效率低下 ,好久才完成三個任務
            併發:老師甲先給學生A去講思路,A聽懂了本身書寫過程而且檢查,而甲老師在這期間直接去給B講思路,講完思路再去給C講思路,讓B本身整理步驟。這樣老師就沒有空                         着,一直在作事情,很快就完成了三個任務。與順序執行不一樣的是,順序執行,老師講完思路以後學生在寫步驟,這在這期間,老師是徹底空着的,沒作事的,因此效率低下。
            並行:直接讓三個老師甲、乙、丙三個老師「同時」給三個學生輔導做業,也完成的很快。.net

 

      例子二:

       順序執行:你吃飯吃到一半,電話來了,你一直到吃完了之後纔去接,這就說明你不支持併發也不支持並行。
       併發:你吃飯吃到一半,電話來了,你停了下來接了電話,接完後繼續吃飯,這說明你支持併發。
       並行:你吃飯吃到一半,電話來了,你一邊打電話一邊吃飯,這說明你支持並

 

理解:

解釋一:並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔發生。
解釋二:並行是在不一樣實體上的多個事件,併發是在同一實體上的多個事件。
解釋三:在一臺處理器上「同時」處理多個任務,在多臺處理器上同時處理多個任務。如hadoop分佈式集羣

普通解釋:
併發:交替作不一樣事情的能力
並行:同時作不一樣事情的能力
專業術語:
併發:不一樣的代碼塊交替執行
並行:不一樣的代碼塊同時執行

併發和並行的意義:

併發和並行均可以處理「多任務」,兩者的主要區別在因而否是「同時進行」多個的任務。

可是 涉及到任務分解(有前後依賴的任務就不能作到並行)、任務運行(可能要考慮互斥、鎖、共享等)、結果合併

四、CPU的時間觀

        爲何要進行「併發、並行、多任務、多線程、異步」等等相關的一些操做,就是爲了充分利用CPU的巨大潛能,由於不少任務是須要時間的,好比文件的讀寫、網絡數據流的下載等等,若是讓CPU處於一個閒置狀態,不充分利用它,程序的效率就很低。

       站在CPU的角度而言,我就是全心全意搞計算的,你卻讓我閒着沒事幹,在個人內心,等待的時間就異常漫長。下面是CPU所謂的時間觀:

       

      

因而可知,站在人類的角度而言,重啓一次也就等了5分鐘,還能夠接受,但是對於CPU而言,它卻感受等了25000年,這是多麼漫長的等待,25000年不作事情,太煎熬了。

五、下面是我推薦的兩本關於多任務,併發並行編程的書籍,一本是基於,NET語言的,一本是基於Python語言的。

    

相關文章
相關標籤/搜索