1. 程式人生 > >並行、併發、同步和互斥

並行、併發、同步和互斥

並行

計算機作業系統中的並行,指的是同時存在於記憶體中的多道作業都處於執行狀態。實際上都是巨集觀上並行微觀上序列,因為這些作業都是開始各自的執行,但都沒執行完畢,只是交替地使用cpu

    在作業系統中是指,一組程式按獨立非同步的速度執行,不等於時間上的重疊(同一個時刻發生)。要區別併發。併發是指:在同一個時間段內,兩個或多個程式執行,有時間上的重疊(巨集觀上是同時,微觀上仍是順序執行)。並行也指8位資料同時通過並行線進行傳送,這樣資料傳送速度大大提高,但並行傳送的線路長度受到限制,因為長度增加,干擾就會增加,資料也就容易出錯。

併發

作業系統中,是指一個時間段中有幾個程式都處於已啟動執行到執行完畢之間,且這幾個程式都是在同一個

處理機上執行,但任一個時刻點上只有一個程式在處理機上執行

  在關係資料庫中,允許多個使用者同時訪問和更改共享資料的程序。SQL Server 使用鎖定以允許多個使用者同時訪問和更改共享資料而彼此之間不發生衝突。

  作業系統併發程式執行的特點:

  併發環境下,由於程式的封閉性被打破,出現了新的特點:

  ①程式與計算不再一一對應,一個程式副本可以有多個計算

  ②併發程式之間有相互制約關係,直接制約體現為一個程式需要另一個程式的計算結果,間接制約體現為多個程式競爭某一資源,如處理機、緩衝區等。

  ③併發程式在執行中是走走停停,斷續推進的。

併發和並行的區別和聯絡

   “並行”是指無論從微觀還是巨集觀,二者都是一起執行的,就好像兩個人各拿一把鐵杴在挖坑,一小時後,每人一個大坑。 而“併發”在微觀上不是同時執行的,只是把時間分成若干段,使多個程序快速交替的執行,從巨集觀外來看,好像是這些程序都在執行,這就好像兩個人用同一把鐵杴,輪流挖坑,一小時後,兩個人各挖一個小一點的坑,要想挖兩個大一點得坑,一定會用兩個小時。 從以上本質不難看出,“併發”執行,在多個程序存在資源衝突時,並沒有從根本提高執行效率

    併發,是在同一個cpu上同時(不是真正的同時,而是看來是同時,因為cpu要在多個程式間切換)執行多個程式。並行,是每個cpu執行一個程式。打個比方,

併發,就像一個人(cpu)喂2個孩子(程式),輪換著每人喂一口,表面上兩個孩子都在吃飯。並行,就是2個人喂2個孩子,兩個孩子也同時在吃飯。

 併發和並行是即相似又有區別的兩個概念,並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔內發生。在多道程式環境下,併發性是指在一段時間內巨集觀上有多個程式在同時執行,但在單處理機系統中,每一時刻卻僅能有一道程式執行,故微觀上這些程式只能是分時地交替執行。倘若在計算機系統中有多個處理機,則這些可以併發執行的程式便可被分配到多個處理機上,實現並行執行,即利用每個處理機來處理一個可併發執行的程式,這樣,多個程式便可以同時執行

同步

     同步就是協同步調,按預定的先後次序進行執行。如:你說完,我再說。

  “同”字從字面上容易理解為一起動作。

  其實不是,“同”字應是指協同、協助、互相配合

  如程序、執行緒同步,可理解為程序或執行緒A和B一塊配合,A執行到一定程度時要依靠B的某個結果,於是停下來,示意B執行;B依言執行,再將結果給A;A再繼續操作

互斥

    兩個或兩個以上的程序,不能同時進入關於同一組共享變數的臨界區域,否則可能發生與時間有關的錯誤,這種現象被稱作程序互斥.