并发(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...算法

相关文章
相关标签/搜索