併發(concurrency)與並行(parallellism)

併發(concurrency)與並行(parallellism)

  1. 併發與並行的概念
      並行:多個cpu實例或者多臺機器同時執行一段處理邏輯,是真正的同時。
      併發:經過cpu調度算法,讓用戶看上去同時執行,實際上從cpu操做層面不是真正的同時。併發每每在場景中有公用的資源,那麼針對這個公用的資源每每產生瓶頸,咱們會用TPS或者QPS來反應這個系統的處理能力。
  2. 並行與併發的異同點
      類似性:都是爲了合理且最大化利用系統的資源。
      差別性:併發(concurrency)與並行(parallellism)這兩種概念理解起來比較容易混淆,我就在以下進行詳細講解。
        圖片描述

      如上圖所示,併發(concurrency)是指在一個cpu處理的線程中一直不斷的切換任務,最終給人的感受就像同時執行了多個任務。而並行(parallellism)在多個cpu同一時間處理多個任務(在一個cpu中出現不了並行的狀態)html

  3. 併發(concurrency)與並行(parallellism)的實例
      在簡單的傳統模式中的生產者及消費者模式中就能體現 併發(concurrency)與並行(parallellism)的實例:
/**
   * 生產者生產出來的產品交給店員
   */
    public synchronized void produce(){  
     if(this.product >= MAX_PRODUCT){
          try{
              wait();  
              System.out.println("產品已滿,請稍候再生產");
          }
          catch(InterruptedException e){
              e.printStackTrace();
          }
          return;
      }
      this.product++;
      System.out.println("生產者生產第" + this.product + "個產品.");
      notifyAll();   //通知等待區的消費者能夠取出產品了
}
/**
   * 消費者從店員取產品
   */
  public synchronized void consume()
  {
      if(this.product <= MIN_PRODUCT)
      {
          try 
          {
              wait(); 
              System.out.println("缺貨,稍候再取");
          } 
          catch (InterruptedException e) 
          {
              e.printStackTrace();
          }
          return;
      }

      System.out.println("消費者取走了第" + this.product + "個產品.");
      this.product--;
      notifyAll();   //通知等待去的生產者能夠生產產品了
  }
在傳統的模式中生產者和消費者在同一線程中得意實現就算線程併發(concurrency),若是生產者模式和消費者模式在不一樣的線程中進行實現,就算作並行(parallellism)。

             參考文檔:https://www.cnblogs.com/wxd01...
             圖片來源:https://zhidao.baidu.com/ques...算法

相關文章
相關標籤/搜索