并发(concurrency)与并行(parallellism)

  1. 并发与并行的概念
      并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。
      并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。并发往往在场景中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS或者QPS来反应这个系统的处理能力。

  2. 并行与并发的异同点
      相似性:都是为了合理且最大化利用系统的资源。
      差异性:并发(concurrency)与并行(parallellism)这两种概念理解起来比较容易混淆,我就在如下进行详细讲解。

        
    15593451-762057dabbc45fe2.png

      如上图所示,并发(concurrency)是指在一个cpu处理的线程中一直不断的切换任务,最终给人的感觉就像同时执行了多个任务。而并行(parallellism)在多个cpu同一时间处理多个任务(在一个cpu中出现不了并行的状态)
  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)。  
15593451-c9082fc4d658649e.png

猜你喜欢

转载自blog.csdn.net/weixin_34318272/article/details/87224215
今日推荐