当前位置: 首页 > news >正文

Java并发 vs 并行:本质区别与应用场景全解析(易混概念)


并发 vs 并行:本质区别与应用场景全解析(易混概念)


一、核心区别:从定义出发

在计算机科学中,并发(Concurrency)并行(Parallelism) 是两种完全不同的任务处理模型,但它们经常被混淆。以下通过定义和示例快速区分:

概念定义生活比喻
并发多个任务交替执行,通过时间片轮转或事件驱动实现“看似同时”的效果。单核 CPU 像一个服务员同时处理多张订单:每张订单处理一点,快速切换,让顾客感觉服务是并行的。
并行多个任务真正同时执行,需要硬件支持(如多核 CPU、分布式系统)。多核 CPU 像多个厨师同时炒菜:每个厨师独立工作,互不干扰,同时完成多个任务。

二、底层原理:从单核到多核
1. 并发的实现机制
  • 单核 CPU 的并发
    通过操作系统调度算法(如时间片轮转),每个任务分配极短的时间片(毫秒级)。
    任务在 就绪队列 中排队,快速切换执行,用户感知不到延迟。

    CPU 时间轴:| Task A | Task B | Task A | Task B | ...
    
  • 多线程编程
    同一进程内创建多个线程,共享内存空间,由操作系统调度线程执行。
    示例(Java)

    new Thread(() -> System.out.println("Task 1")).start();
    new Thread(() -> System.out.println("Task 2")).start();
    
2. 并行的实现条件
  • 多核 CPU:每个核心独立执行指令,无需切换上下文。

  • 分布式系统:多台机器协作处理任务。
    示例(Java 多线程并行)

    ExecutorService executor = Executors.newFixedThreadPool(2);
    executor.submit(() -> System.out.println("Process 1"));
    executor.submit(() -> System.out.println("Process 2"));
    executor.shutdown();
    

三、应用场景:何时用并发?何时用并行?
1. 并发适合的场景
场景原因示例
I/O 密集型任务任务大部分时间在等待 I/O(如网络请求、文件读写),CPU 空闲时可切换其他任务。Web 服务器处理大量 HTTP 请求。
用户界面响应保持界面流畅,避免卡顿(如后台下载时,前台仍可响应用户操作)。桌面应用的后台文件下载。
事件驱动编程通过回调或协程(如 Node.js、Go)高效处理高并发请求。实时聊天服务器的消息处理。
2. 并行适合的场景
场景原因示例
计算密集型任务需要大量 CPU 计算(如图像处理、数值模拟),多核并行可显著减少总耗时。视频转码时拆分任务到多个 CPU 核心处理。
大数据处理分布式计算框架(如 Hadoop、Spark)将数据分片,并行处理后汇总结果。分析 TB 级日志文件的访问统计。
训练机器学习模型使用 GPU 的数千个核心并行计算矩阵运算(如 TensorFlow、PyTorch)。深度神经网络的反向传播计算。

四、技术实现:编程模型对比
1. 并发编程模型
  • 多线程:轻量级,共享内存,需处理线程安全问题(如 Java 的 synchronized)。
  • 异步非阻塞 I/O:通过事件循环管理任务(如 Java 的 CompletableFuture)。

示例(Java 异步编程)

CompletableFuture.runAsync(() -> System.out.println("Async Task 1")).thenRunAsync(() -> System.out.println("Async Task 2"));
2. 并行编程模型
  • 多进程:进程间内存隔离,通过 IPC(管道、Socket)通信。
  • SIMD 指令集:单指令流多数据流,适用于向量计算(如 Java 的 Vector API)。

示例(Java 并行流)

List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
numbers.parallelStream().forEach(n -> System.out.println(n * 2));

五、性能权衡:并发与并行的优缺点
维度并发并行
资源开销低(线程切换成本低)高(多核/多进程需要更多 CPU 和内存)
适用硬件单核/多核均可必须多核或分布式环境
开发复杂度中(需处理竞态条件、死锁)高(需设计任务拆分、数据同步)
扩展性垂直扩展(单机性能上限)水平扩展(可跨多机无限扩展)

六、总结:如何选择?
  1. 优先并发

    • I/O 密集型任务(如 Web 服务、文件处理)。
    • 资源有限且需要高响应性(如移动应用)。
    • 使用异步框架(如 CompletableFuture)简化代码。
  2. 必须并行

    • 计算密集型任务(如科学计算、机器学习)。
    • 大数据处理(如 Spark 分布式计算)。
  3. 混合模式
    现代系统通常同时使用并发和并行。例如:

    • 多核 CPU 上并行运行多个进程,每个进程内部通过多线程实现并发。
    • 分布式集群中,每台机器并行处理数据分片,单机内多线程并发处理任务。

相关文章:

Java并发 vs 并行:本质区别与应用场景全解析(易混概念)

并发 vs 并行&#xff1a;本质区别与应用场景全解析&#xff08;易混概念&#xff09; 一、核心区别&#xff1a;从定义出发 在计算机科学中&#xff0c;并发&#xff08;Concurrency&#xff09; 和 并行&#xff08;Parallelism&#xff09; 是两种完全不同的任务处理模型&a…...

深度评测DeepSeek、ChatGPT O1和谷歌Gemini AI应用开发场景 - DeepSeek性能完胜!

下面我会展示我为期一周的实验结果&#xff0c;创作不宜&#xff0c;希望大家关注我&#xff0c;以后多多互3&#xff01;前一阵我在互联网上看到很多关于DeepSeek R1的讨论&#xff0c;这个开源模型据说可以媲美&#xff0c;甚至优于像OpenAI o1这样的付费模型。 由于我在日常…...

【GoTeams】-5:引入Docker

本文目录 1. Dokcer-compose回顾下Docker知识编写docker-compose.yaml运行docker 2. 部署go服务编写dockerfile 1. Dokcer-compose 这里简单先用一下win版本的Docker&#xff0c;后期开发好了部署的时候再移植到服务器下进行docker部署。 输入命令docker-compose version 就可…...

mysql的Innodb最大支持的索引长度是多少,以及索引长度怎么计算

今天正好有空&#xff0c;来讲个之前粉丝经常问的一个知识&#xff0c;就是mysql的Innodb最大支持的索引长度是多少&#xff1f;以及索引长度怎么计算&#xff1f; 一、mysql的innodb引擎&#xff0c;创建索引最大支持的长度是多少字节&#xff1f; 不墨迹&#xff0c;直接说…...

深入解析 configService.addListener 使用中的注意事项

在使用 Nacos 的 configService.addListener 方法进行配置监听时&#xff0c;为了确保程序的稳定性、可靠性以及高效性&#xff0c;有诸多注意事项需要我们关注。下面将对这些关键要点进行详细阐述。 一、连接稳定性 1.1 网络连接问题 Nacos 客户端与服务端通过网络进行通信&…...

数据结构和算法--仅仅用于理解里面的术语,入门级别

数据结构和算法 预先知识&#xff1a;java 黑马前29节 cmd命令&#xff1a; 文件夹路径不区分大小写 E: dir:查看所有文件 cd 目录 :进入 cd… 返回上一级 cd 目录1\目录2 cd\ 回到根目录 cls 清屏 exit 退出 打开文件夹必须用cd 查找&#xff0c;但是文件不用&am…...

this.$nextTick() 作用及实现原理

1、原理和作用 2、更新任务推送到微任务队列后&#xff0c;vue是如何知道所有的更新任务执行完成了&#xff1f; vue将更新任务推送给微任务队列&#xff1b;当更新任务执行的时候&#xff0c;将回调队列任务推给微任务队列&#xff1b;通过微任务队列的原子性和先进先出机制&…...

C#常用的循环语句

在C#中&#xff0c;循环是一种控制结构&#xff0c;用于重复执行一组语句直到满足特定条件。C#提供了几种循环结构&#xff0c;包括for循环、while循环、do-while循环和foreach循环。每种循环都有其特定的用途和场景。下面我将逐一介绍这些循环的用法。 一、C#循环类型 1. fo…...

Android View 设置背景方式全解析

一、整体概述 在 Android 开发中&#xff0c;视图&#xff08;View&#xff09;的背景设置是构建用户界面的重要组成部分。一个合适的背景可以提升界面的美观度&#xff0c;增强用户体验。从简单的纯色背景到复杂的动态效果&#xff0c;背景设置不仅影响界面美观&#xff0c;还…...

HTTP拾技杂谈

HTTP拾技杂谈 简单聊聊HTTP中的那些东西 文章目录 HTTP拾技杂谈前言HTTP协议1.请求从客户端到服务器端的4个步骤一般客户端请求如下&#xff1a;服务端响应如下 2.Keep-AliveHTTP方法Cookie 总结 前言 超文本传输协议&#xff08;Hypertext Transfer Protocol &#xff0c;HT…...

网络安全之RSA算法

1978年就出现了这种算法&#xff0c;它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作&#xff0c;也很流行。算法的名字以发明者的名字&#xff08;RonRivest&#xff0c;AdiShamir和LeonardAdleman&#xff09;命名。但RSA的安全性一直未能得到理论上的证…...

神经网络为什么要用 ReLU 增加非线性?

在神经网络中使用 ReLU&#xff08;Rectified Linear Unit&#xff09; 作为激活函数的主要目的是引入非线性&#xff0c;这是神经网络能够学习复杂模式和解决非线性问题的关键。 1. 为什么需要非线性&#xff1f; 1.1 线性模型的局限性 如果神经网络只使用线性激活函数&…...

ES10(2019)、ES11(2020) 新增特性(八)

目录 ES10&#xff08;2019&#xff09; Array.flat() Array.flatMap() String.trimStart()和String.trimEnd() Symbol.prototype.description Object.fromEntries() ES11&#xff08;2020&#xff09; Nullish coalescing Operator【空值运算符】 可选链&#xff08…...

利用MQ自动取消未支付超时订单最佳实践

一、利用MQ自动取消未支付超时订单最佳实践 1、基于 RocketMQ 延迟消息 1.1&#xff1a;延迟消息 当消息写入到 Broker 后&#xff0c;不会立刻被消费者消费&#xff0c;需要等待指定的时长后才可被消费处理的消息&#xff0c;称为延时消息。 1.2&#xff1a;实现流程 &am…...

1-003:MySQL 的索引类型有哪些?

MySQL 中的索引类型主要分为以下几类&#xff0c;每种索引都有不同的适用场景和优化查询的作用&#xff1a; 1. 按存储结构分类 ① 聚簇索引&#xff08;Clustered Index&#xff09; 特点&#xff1a; InnoDB 引擎的 主键索引 就是 聚簇索引。数据与索引存储在一起&#xff…...

php虚拟站点提示No input file specified时的问题及权限处理方法

访问站点&#xff0c;提示如下 No input file specified. 可能是文件权限有问题&#xff0c;也可能是“.user.ini”文件路径没有配置对&#xff0c;最简单的办法就是直接将它删除掉&#xff0c;还有就是将它设置正确 #配置成自己服务器上正确的路径 open_basedir/mnt/qiy/te…...

Unity UGUI下实现精确点击的一种方式

比如有这样一个情况&#xff0c;UI的显示区域是个圆形&#xff0c;在点击的时候也需要精确点击到这个圆形显示区域&#xff0c;但是UI元素的RectTransform是个矩形 1. 使用脚本修改 2. 原理探究 此脚本继承了Image组件&#xff0c;但是获取了自身的Collider2D&#xff0c;目…...

元宇宙崛起:区块链与金融科技共绘数字新世界

文章目录 一、引言二、元宇宙与区块链的深度融合三、区块链在元宇宙金融中的应用四、金融科技在元宇宙中的创新应用五、面临的挑战与机遇《区块链与金融科技》亮点内容简介获取方式 一、引言 随着科技的飞速发展&#xff0c;元宇宙概念逐渐走进人们的视野&#xff0c;成为数字…...

postgresql14编译安装脚本

#!/bin/bash####################################readme################################### #先上传postgresql源码包&#xff0c;再配置yum源&#xff0c;然后执行脚本 #备份官方yum源配置文件&#xff1a; #cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS…...

警惕AI神话破灭:深度解析大模型缺陷与禁用场景指南

摘要 当前AI大模型虽展现强大能力&#xff0c;但其本质缺陷可能引发系统性风险。本文从认知鸿沟、数据困境、伦理雷区、技术瓶颈四大维度剖析大模型局限性&#xff0c;揭示医疗诊断、法律决策等8类禁用场景&#xff0c;提出可信AI建设框架与用户防护策略。通过理论分析与实操案…...

1分钟看懂React的那些Hook‘s

一、useEffect的五指山 1.执行时机&#xff1a;组件初始化,组件更新&#xff08;组件内state变化&#xff09; useEffect(() > {}) 2.执行时机&#xff1a;组件初始化 useEffect(() > {},[]) 3.执行时机&#xff1a;组件初始化&#xff0c;依赖的状态发生变化&#xf…...

聚焦两会:科技与发展并进,赛逸展2025成创新新舞台

在十四届全国人大三次会议和全国政协十四届三次会议期间&#xff0c;代表委员们围绕多个关键议题展开深入讨论&#xff0c;为国家未来发展谋篇布局。其中&#xff0c;技术竞争加剧与经济转型需求成为两会焦点&#xff0c;将在首都北京举办的2025第七届亚洲消费电子技术贸易展&a…...

深入C语言:指针与数组的经典笔试题剖析

1. sizeof和strlen的对比 1.1 sizeof sizeof 是C语言中的一个操作符&#xff0c;用于计算变量或数据类型所占内存空间的大小&#xff0c;单位是字节。它不关心内存中存储的具体数据内容&#xff0c;只关注内存空间的大小。 #include <stdio.h> int main() {int a 10;…...

⚡ 回声谷即时通讯系统

基于SpringBootVue3的实时通信解决方案 &#x1f31f; 核心特性 #mermaid-svg-uxEwEcjlUVI6Tjjf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uxEwEcjlUVI6Tjjf .error-icon{fill:#552222;}#mermaid-svg-uxEwEcjl…...

实验题目:授权及收回授权、约束、触发器

一、实验环境 实验使用普通PC机一台&#xff0c;MySQL数据库版本8.0.36&#xff0c;使用Navicat Premium 16提供图形化界面。 二、实验内容 1、数据库的账号、用户的建立、删除以及授权机制 2、数据库中数据完整性约束控制技术 3、触发器 三、具体完成情况&#xff08;提…...

Spark(8)配置Hadoop集群环境-使用脚本命令实现集群文件同步

一.hadoop的运行模式 二.scp命令————基本使用 三.scp命令———拓展使用 四.rsync远程同步 五.xsync脚本集群之间的同步 一.hadoop的运行模式 hadoop一共有如下三种运行方式&#xff1a; 1. 本地运行。数据存储在linux本地&#xff0c;测试偶尔用一下。我们上一节课使用…...

c#中使用时间戳转换器

在C#中,时间戳转换器通常用于将时间戳(通常是一个表示自某一特定时间点(如1970年1月1日UTC)以来的毫秒数的长整型值)转换为DateTime对象,或者将DateTime对象转换回时间戳。以下是几种实现这一功能的方法: 1. 使用DateTime的构造函数 将时间戳转换为DateTime long tim…...

LLM中的transformer结构学习(二 完结 Multi-Head Attention、Encoder、Decoder)

文章目录 LLM中的transformer结构学习&#xff08;二 完结 Multi-Head Attention、Encoder、Decoder&#xff09;Self-Attention &#xff08;自注意力机制&#xff09;结构多头注意力 EncoderAdd & Norm 层Feed Forward 层 EncoderDecoder的第一个Multi-Head AttentionMas…...

FreeSWITCH 之 chat

要把 FreeSWITCH 之 chat 完全研究清楚&#xff0c;似乎不容易 发送&#xff0c;路由&#xff0c;接收 跟哪些模块有关 等等 咱一边查资料&#xff0c;一边整理&#xff0c;不着急 先看看 Kamalio 怎么发 MESSAGE loadmodule "uac.so"route[uac_send_message] {…...

本地fake server,

C# 制作的系统级tcp 重定向&#xff0c;整个系统只要有访问指定url&#xff0c;返回自定义内容到访问端。不局限在浏览器单一方面。 再者请理解这个图的含金量&#xff0c;服务器down机都可以模拟。 用途那就太多了&#xff0c;当然很多用途都不正当。嘿嘿 如果你很想要源代…...

用Deepseek写一个 HTML 和 JavaScript 实现一个简单的飞机游戏

大家好&#xff01;今天我将分享如何使用 HTML 和 JavaScript 编写一个简单的飞机游戏。这个游戏的核心功能包括&#xff1a;控制飞机移动、发射子弹、敌机生成、碰撞检测和得分统计。代码简洁易懂&#xff0c;适合初学者学习和实践。 游戏功能概述 玩家控制&#xff1a;使用键…...

解析 SQL,就用 sqlparse!

文章目录 解析 SQL&#xff0c;就用 sqlparse&#xff01;一、背景&#xff1a;为什么你需要 sqlparse&#xff1f;二、什么是 sqlparse&#xff1f;三、如何安装 sqlparse&#xff1f;四、简单易用的库函数1\. parse(sql)2\. format(sql, **options)3\. split(sql)4\. get_typ…...

Flask 全栈学习指南

一、Flask 基础核心 1. 核心概念与启动流程 WSGI 与 Werkzeug Flask 基于 Werkzeug 实现 WSGI 协议&#xff0c;处理 HTTP 请求到响应的全流程。手动实现 WSGI 应用示例&#xff1a;def simple_app(environ, start_response):status 200 OKheaders [(Content-type, text/pla…...

git的使用

1、git的安装&#xff08;windows10&#xff09; 网址&#xff1a;Git - Downloading Package全部默认安装就好。在任意文件夹中右击&#xff0c;列表中出现git即为安装成功。 2、git的基本配置 右击打开git bash设置用户信息 git config --global user.name "username…...

MQTT协议下温度数据上报观测云最佳实践

MQTT 介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;是一种轻量级的、基于发布/订阅模式的消息传输协议&#xff0c;专为低带宽、高延迟或不可靠的网络环境设计&#xff0c;广泛应用于物联网&#xff08;IoT&#xf…...

什么是Flask

Flask是Python中一个简单、灵活和易用的Web框架&#xff0c;适合初学者使用。它提供了丰富的功能和扩展性&#xff0c;可以帮助开发者快速构建功能完善的Web应用程序。 以下是Python Flask框架的一些特点和功能&#xff1a; Flask 是一个使用 Python 编写的轻量级 WSGI 微 Web…...

数字投屏叫号器-发射端python窗口定制

窗口 本系列前章介绍&#xff0c;叫号器的显示端&#xff0c;完成了视频音频的形成和传输的介绍。本章节开始定制小窗口。 最终实现&#xff0c;处于桌面最前端&#xff0c;发送指令&#xff0c;集合前篇即可完成&#xff1a; 处理本地text.txt更新&#xff0c;随之被rtsp采集…...

文本转语音-音画适时推送rtsp并播放

文本语音 rtsp适时播放叫号系统的底层逻辑 发布Linux, unix socket 和window win32做为音频源的 python10下的(ffmpeg version 7.1) 可运行版本. 这两天在弄这个&#xff0c;前2篇是通过虚拟声卡&#xff0c;达到了最简单的一个逻辑&#xff0c;播放文本就从声卡发声&#xff0…...

clickhouse修改和删除数据

标题&#xff1a;ClickHouse中修改和删除数据的简易指南 在大数据时代&#xff0c;数据库技术的发展日新月异。作为一款专为实时分析设计的列式数据库管理系统&#xff0c;ClickHouse因其高效的查询性能而受到欢迎。照这么推测的话&#xff0c;对于那些习惯于传统SQL操作&…...

2025CSP-J 冲刺训练(1):二分

2025CSP-J 冲刺训练 1 一、二分查找函数1. 头文件2. 前提条件3. 功能函数3.1 lower_bound3.2 upper_bound 二、二分答案模板1. 前提条件2. 模板 三、典型例题1. 寻找固定的和1.1 审题1.2 分析1.3 参考答案 2. Snuke Festival2.1 审题2.2 分析2.3 参考答案 四、拓展例题1. 晒衣服…...

无公网IP也能远程控制Windows:Linux rdesktop内网穿透实战

文章目录 前言1. Windows 开启远程桌面2. Linux安装rdesktop工具3. Win安装Cpolar工具4. 配置远程桌面地址5. 远程桌面连接测试6. 设置固定远程地址7. 固定地址连接测试 前言 如今远程办公已经从一种选择变成了许多企业和个人的必修课&#xff0c;而如何在Linux系统上高效地访…...

Win10 访问 Ubuntu 18 硬盘

目录 方案一&#xff1a;使用Samba共享服务Ubuntu 18 端配置Windows 10 端访问 方案二&#xff1a;使用 SSHFS&#xff08;需在 Windows 上安装 SSH 客户端&#xff09;Ubuntu 18 端配置Windows 10 端配置 方案三&#xff1a;使用 FTP 服务Ubuntu 18 端配置Windows 10 端访问 方…...

算法.习题篇

算法 — 地大复试 模拟 while循环和MOD循环计数 1.约瑟夫问题 http://bailian.openjudge.cn/practice/3254 using namespace std;bool isNoPeople(vector<bool> c)//判断当前数组是否一个小孩都没有了 {bool nopeople true;for (bool ival : c){if ( ival true)nop…...

upload-labs文件上传

第一关 上传一个1.jpg的文件&#xff0c;在里面写好一句webshell 保留一个数据包&#xff0c;将其中截获的1.jpg改为1.php后重新发送 可以看到&#xff0c;已经成功上传 第二关 写一个webshell如图&#xff0c;为2.php 第二关在过滤tpye的属性&#xff0c;在上传2.php后使用b…...

一二三应用开发平台——能力扩展:多数据源支持

背景 随着项目规模的扩大&#xff0c;单一数据源已无法满足复杂业务需求&#xff0c;多数据源应运而生。 技术选型 MyBatis-Plus 的官网提供了两种多数据源扩展插件&#xff1a;开源生态的 <font style"color:rgb(53, 56, 65);">dynamic-datasource</fon…...

【Python】整数除法不正确,少1的问题,以及有关浮点数转换的精度问题

1. 问题 今天在做leetcode 不同路径 的时候发现了个问题 对于m53 n4class Solution:def uniquePaths(self, m: int, n: int) -> int:rlt 1for i in range(0, m-1):rlt * (m n - 2 - i)for i in range(0, m-1):rlt / (i 1)return int(rlt)为什么这个结果是 26234class S…...

【贪心算法】简介

1.贪心算法 贪心策略&#xff1a;解决问题的策略&#xff0c;局部最优----》全局最优 &#xff08;1&#xff09;把解决问题的过程分成若干步 &#xff08;2&#xff09;解决每一步的时候&#xff0c;都选择当前看起来的“最优”的算法 &#xff08;3&#xff09;“希望”得…...

狮子座大数据分析(python爬虫版)

十二星座爱情性格 - 星座屋 首先找到一个星座网站&#xff0c;作为基础内容&#xff0c;来获取信息 网页爬取与信息提取 我们首先利用爬虫技术&#xff08;如 Python 中的 requests 与 BeautifulSoup 库&#xff09;获取页面内容。该页面&#xff08;xzw.com/astro/leo/&…...

【商城实战(20)】商品管理功能深化实战

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

YC 孵化项目 Pinch:实时语音翻译视频会议平台;Mistral OCR:能处理多语言多模态复杂文档丨日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 …...