首页 > 编程语言 >【Java面试】面试自閟了!工作5年的小伙伴今天面试被吊打问我,并行和并发有什么区别?

【Java面试】面试自閟了!工作5年的小伙伴今天面试被吊打问我,并行和并发有什么区别?

时间:2022-09-05 15:45:19浏览次数:64  
标签:Java 并发 并行 吊打 面试 线程 架构 CPU

“并行和并发有什么区别?”

关于这个问题,很多工作5年以上的同学都回答不出来。

或者说,自己有一定的理解,但是不知道怎么表达。

大家好,我是Mic,一个工作了14年的Java程序员。

关于这个问题,面试官想考察什么呢?

问题解析

并行和并发最早其实描述的是Java并发编程里面的概念。

他们强调的是CPU处理任务的能力。

简单来说,并发,就是同一个时刻,CPU能够处理的任务数量,并且对于应用程序来说,不会出现卡顿现象。

并行,就是同一个时刻,允许多个任务同时执行,在多核CPU架构中,同时执行的任务数量是由核心数决定的,比如在4核4线程的CPU中,只能同时执行4个线程。

这两个概念看起来类似,但其实描述的纬度是不同的,并发描述的是程序处理能力的视角

并行描述的是CPU处理任务方式的视角,一个是宏观层面,一个是微观层面。

他们两个又是相辅相成的,CPU并行执行任务的能力,又能提升程序的并发处理性能。

所以多核CPU的性能要比单核CPU好。

当然,如果是单核CPU,也可以通过时间片切换的方式提升并发能力。

Erlang之父Joe Armstrong用了一张图片解释了并行和并发的区别。

并发就是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机。

preview

所以,在我看来,这个面试题可以很好的考察求职者Java并发编程的理解程度。

网上有很多的文章都在尝试解释这个概念,但是这些解释反而让这个问题越来越复杂。

我认为只有对线程的底层原理有深度理解,才能很好的回答这个问题。

高手:

并行和并发是Java并发编程里面的概念。

并行,是指在多核CPU架构下,同一时刻同时可以执行多个线程的能力。

在单核CPU架构中,同一时刻只能运行一个线程。

在4核4线程的CPU架构中,同一时刻可以运行4个线程,那这4个线程就是并行执行的。

并发,是指在同一时刻CPU能够处理的任务数量,也可以理解成CPU的并发能力。

在单核CPU架构中,操作系统通过CPU时间片机制提升CPU的并发能力

在多核CPU架构中,基于任务的并行执行能力以及CPU时间片切换的能力来提升CPU的并发能力。

所以,总的来说,并发是一个宏观概念,它指的是CPU能够承载的压力大小,并行是一个微观概念,它描述CPU同时执行多个任务的能力。

总结

好了,今天的分享就到这里结束了

如果喜欢我的作品,记得点赞、收藏、关注

需要Java面试题合集扫描下方

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mic带你学架构
如果本篇文章对您有帮助,还请帮忙点个关注和赞,您的坚持是我不断创作的动力。欢迎关注「跟着Mic学架构」公众号公众号获取更多技术干货!

标签:Java,并发,并行,吊打,面试,线程,架构,CPU
From: https://www.cnblogs.com/mic112/p/16658380.html

相关文章

  • (转)java中常见的关键字
    原文:https://www.cnblogs.com/zxy6/p/14176980.html什么是关键字呢?概述:关键字就是在java语言中赋予特殊含义的单词特点:1.组成的关键字的单词全是小写......
  • java RSA生成公钥和私钥
    1.随机生成密钥对/***随机生成密钥对*@throwsNoSuchAlgorithmException*/publicstaticvoidgenKeyPair()throwsNoSuchAlgorithmExcepti......
  • 开源:Taurus.MVC-Java 版本框架 (支持javax.servlet.*和jakarta.servlet.*双系列,内集成
    版本说明:因为之前有了Taurus.MVC-DotNet版本框架,因此框架标了-Java后缀。.Net 版本:开源文章:开源:Taurus.MVC-DotNet版本框架(支持.NETCore系列,内集成微服务服务端......
  • 干货 | JavaScript脚本注入,完成Selenium 无法做到的那些事
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取当webdriver遇到无法完成的操作时,可以使用JavaScript来完成,webdriver提供了execute_scr......
  • Java-需要注意的问题
    long类型问题:longseconds=365*24*3600;      longdistence=speed*seconds;      System.out.println("光年的距离"+distence);带小数点的数默认是......
  • JAVA进阶--不可变集合、Stream流、异常--2022年9月4日
    第一节 不可变集合1、不可变集合的特点定义完成后不可以修改,或者添加、删除2、如何创建不可变集合List、Set、Map接口中,都存在of方法可以创......
  • java复习随笔(八)——线程(二)——生产者和消费者
    生产者消费者生产者消费者模式概述生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻所谓生产者消费者问题......
  • 一、Java入门
    一、java版本 1、过渡版本  2、长期支持版本LTS(Java8使用最广)二、java用于做什么(java的分类) 1、JavaSE用于桌面应用的开发(用户只要打开程序,程序的界面......
  • 力扣227(java)-基本计算器Ⅱ(中等)
    题目:给你一个字符串表达式s,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。你可以假设给定的表达式总是有效的。所有中间结果将在 [-231,231......
  • LeetCode 617 在 JavaScript 中合并两个二叉树
    LeetCode617在JavaScript中合并两个二叉树问题陈述给你两棵二叉树根1和根2.想象一下,当您将其中一个覆盖另一个时,两棵树的某些节点重叠,而其他节点则不重叠。您需......