[转]并发和并行的区别

转载自http://blog.youkuaiyun.com/coolmeme/article/details/9997609

并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。

在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

①程序与计算不再一一对应,一个程序副本可以有多个计算
②并发程序之间有相互制约关系,直接制约体现为一个程序需要另一个程序的计算结果,间接制约体现为多个程序竞争某一资源,如处理机、缓冲区等。
③并发程序在执行中是走走停停,断续推进的。

在网络服务器上,并发是指同一时刻能处理的连接数,比如,服务器能建立1000个TCP连接,即服务器同时维护了1000个socket,这个服务器的并发量就是1000,但是服务器可能只有单核或者8核,16核等,总之对这1000个socket连接的处理也是分时来做的。每个socket服务器处理的时间如果是1s,那么该服务器1s内可以处理完1000个请求,如果每个socket处理100ms的话,那么该服务器1s内可以处理10000个请求。


在这里我们先抛出一些概念,如果这些概念都弄清楚了,并发和并行基本就清楚了。

会话:在我们用电脑工作时,打开的一个窗口或一个Web页面,我们可以把它叫做一个“会话”,扩展到web服务器上,要维护很多个用户的web页面访问,我们可以认为服务器管理了多个“会话”。

并发连接数:网站有时候报错:“HTTP Error 503. The service is unavailable”。但刷一两下又正常,估计很可能是超过网站的最大并发连接数了。并发连接指网络流量管理设备或代理服务器对其业务信息流的处理能力,是能够同时处理的点对点连接的最大数目,它反映出设备对多个连接的访问控制能力和连接状态跟踪能力,这个参数的大小直接影响到设备所能支持的最大信息点数。

并发可以理解为服务器最多维护多少个会话数,并行则不一样,它关系的是有多少个会话是在同时进行,假如有两台服务器(进程),可能并行的数量是2,而并发的数量是1000。我们还可以对比下吞吐量和带宽的概念。

吞吐量与带宽的区分:吞吐量和带宽是很容易搞混的一个词,两者的单位都是Mbps。先来看两者对应的英语,吞吐量:throughput;带宽:Max net bitrate。当讨论通信链路的带宽时,一般是指链路上每秒所能传送的比特数,它取决于链路时钟速率和信道编码在计算机网络中又称为线速。可以说以太网的带宽是10Mbps。但是需要区分链路上的可用带宽(带宽)与实际链路中每秒所能传送的比特数(吞吐量)。通常更倾向于用“吞吐量”一词来表示一个系统的测试性能。这样,因为实现受各种低效率因素的影响,所以由一段带宽为10Mbps的链路连接的一对节点可能只达到2Mbps的吞吐量。这样就意味着,一个主机上的应用能够以2Mbps的速度向另外的一个主机发送数据。

带宽可以理解成是并行,即同时可以有10M 个bit(0,1)在线路中传输。而吞吐量类似并发,指主机每秒可以处理2M个bit。比喻有些不是很恰当,但仔细体会下,有些类似之处。

### 三、并发并行的核心区别 并发并行是多线程编程中经常涉及的概念,尽管两者在字面上看似相似,但在实际执行方式应用场景上有显著区别。 #### 1. 定义与执行方式 并发是指多个任务在同一时间段内交替执行。这意味着这些任务并不是真正同时运行,而是通过时间片轮的方式共享同一个处理单元[^2]。例如,在单核处理器上,操作系统会快速切换不同的任务,使得用户感知上多个任务似乎是在同时进行的[^3]。 并行则是指多个任务在同一时刻真正地同时执行。这种执行模式依赖于多核处理器或分布式系统中的多个执行单元[^4]。每个任务可以分配到独立的处理核心,从而实现物理上的同步运行。 #### 2. 资源利用与硬件依赖 并发可以在单处理器或多处理器系统中实现,尤其适用于资源受限的环境。它通过快速切换任务来提高系统的吞吐量,并充分利用处理器的时间。然而,这种切换带来了额外的上下文切换开销,并不能真正提升计算能力[^5]。 并行则主要依赖于多核处理器或多台计算设备的支持。由于每个任务都有自己的执行单元,因此能够充分发挥硬件性能优势,显著提升整体计算效率[^3]。对于需要大量计算的任务,如图像处理、科学模拟等,并行化是提高速度的关键手段[^4]。 #### 3. 应用场景 并发适合用于响应外部事件或处理异步操作,比如Web服务器接收来自不同客户端的请求、GUI应用程序处理用户的点击动作等。在这种情况下,任务之间的切换不需要严格保证实时性,但必须保持良好的交互体验[^2]。 并行更适合那些可以被分解为多个独立子任务的问题,例如矩阵运算、大规模数据分析以及深度学习训练等。这些任务通常具有高度的数据并行性或任务并行性,可以通过并行计算大幅缩短执行时间。 #### 4. 执行效果与逻辑结构 从执行效果来看,并发在宏观上表现出“同时”执行的现象,但实际上只是快速交替执行的结果;而并行无论从宏观还是微观层面都是真正的同步执行。并发更关注逻辑结构的设计,强调如何协调多个任务的执行顺序;并行则侧重于物理层面的同时运行。 ```java // 示例:Java 中使用线程实现并发 Thread thread1 = new Thread(() -> { // 执行任务1 }); Thread thread2 = new Thread(() -> { // 执行任务2 }); thread1.start(); thread2.start(); // 如果在多核CPU上运行,则有可能实现并行执行 ``` 上述代码展示了如何创建两个线程以实现并发。如果程序运行在具备多核CPU的环境中,则这两个线程可能会被分配到不同的核心上,从而达到并行的效果。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值