资讯专栏INFORMATION COLUMN

并发(concurrency)与并行(parallellism)

KavenFan / 1055人阅读

摘要:并发与并行并发与并行的概念并行多个实例或者多台机器同时执行一段处理逻辑,是真正的同时。并发通过调度算法,让用户看上去同时执行,实际上从操作层面不是真正的同时。并行与并发的异同点相似性都是为了合理且最大化利用系统的资源。

并发(concurrency)与并行(parallellism)

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76959.html

相关文章

  • 垃圾回收算法 JVM 垃圾回收器综述

    摘要:垃圾回收算法与垃圾回收器综述我们常说的垃圾回收算法可以分为两部分对象的查找算法与真正的回收方法。串行垃圾回收器一次只使用一个线程进行垃圾回收并行垃圾回收器一次将开启多个线程同时进行垃圾回收。 垃圾回收算法与 JVM 垃圾回收器综述归纳于笔者的 JVM 内部原理与性能调优系列文章,文中涉及的引用资料参考 Java 学习与实践资料索引、JVM 资料索引。 showImg(https://s...

    imingyu 评论0 收藏0
  • 一文了解JVM全部垃圾回收器,从Serial到ZGC

    摘要:是目前的实验收集器。也是需要暂停程序一切的工作,然后多线程执行垃圾回收。与最大的不同,它关注的是垃圾回收的吞吐量。这里的吞吐量指的是总时间与垃圾回收时间的比例。筛选回收,评估标记垃圾,根据模式回收垃圾。 《对象搜索算法与回收算法》介绍了垃圾回收的基础算法,相当于垃圾回收的方法论。接下来就详细看看垃圾回收的具体实现。 上文提到过现代的商用虚拟机的都是采用分代收集的,不同的区域用不同的收集...

    jasperyang 评论0 收藏0
  • [JVM 相关] Java 新型垃圾回收器(Garbage First,G1)

    摘要:适用收集场景新生代收集老年代收集并行收集器又叫吞吐量收集器应用于多核系统。它是为了平衡延时和吞吐量之间的一种最优关系。 回顾传统垃圾回收器 HotSpot 垃圾收集器实现 Serial Collector(串型收集器) 使用场景,大多数服务器是单核CPU。适用收集场景:1. 新生代收集(Young Generation Collection)2. 老年代收集(Old Genera...

    Jason 评论0 收藏0
  • PyTips 0x 12 - Python 线程协程(1)

    摘要:中关于线程的标准库是,之前在版本中的在之后更名为,无论是还是都应该尽量避免使用较为底层的而应该使用。而与线程相比,协程尤其是结合事件循环无论在编程模型还是语法上,看起来都是非常友好的单线程同步过程。 项目地址:https://git.io/pytips 要说到线程(Thread)与协程(Coroutine)似乎总是需要从并行(Parallelism)与并发(Concurrency)谈起...

    el09xccxy 评论0 收藏0
  • JAVA GC 原理详解

    摘要:虚拟机栈区也就是通常所说的栈区,它描述的是方法执行的内存模型,每个方法被执行的时候都创建一个栈帧,用于存储局部变量表操作数栈动态链接方法出口等。每个方法被调用到完成,相当于一个栈帧在虚拟机栈中从入栈到出栈的过程。 大多数情况下我们对GC的了解都只是浅层含义上的,下面我们来详细讲解下内部的一些实现原理。讲解GC之前,我们得先了解下JVM的内存结构,才能让我们理解GC导致是干嘛的。 一.J...

    wangjuntytl 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<