如何理解并发(Concurrency)和并行(Parallelism)的区别

并发与并行的区别
本文通过生动的例子解释了并发和并行的概念。并发是指一个线程处理多个任务,如烧水的同时看报纸;并行则是指多个线程共同处理一个任务,如同时砌一面墙。并行可以缩短任务完成时间,而并发可能会因上下文切换导致效率下降。

网上有很多对并发和并行的解释,讲的很多,对一些人说理解起来还是有些吃力,我这里尽量用最简单的例子说一下自己对这两个概念的解释。


并发Concurrency:一个人干多件事(一个线程处理多个任务)

例如:烧水和看报纸,一个时间区间里烧水和看报纸这两件事是可以同时进行的(一边看报,一边烧水大笑),看报的时候再时不时的看一下水开了没有

结论:单个事情的处理时间并不会缩短,无论你要烧水期间干什么事情,烧水花费的时间是不会变的,如果干的事情多了,反倒是在多个事情切换的过程中多花时间,会使所有事情加在一起总的处理效率下降(多线程的上下文切换)


并行Parallelism:多个人干一件事(多个线程处理一个任务)

例如:就像盖房子(砌一面墙),一个时间区间里大家干的都是这一件事情,

结论:人越多,每人分工干一部分,就会缩短建造时间

实际应该过程中,还是需要跟据需求来决定用哪种方式,在大数据处理中常用的mapreduce 设计思想其实就是并行。

文章很简短,但愿大家能理解。

### 并发并行的概念及区别 #### 并行的概念 并行Parallelism)是指在同一时间,多个任务能够同时运行。这种运行模式的前提条件是必须存在多个处理器或核心[^1]。例如,在一个多核CPU系统中,每个核心可以独立执行不同的任务,从而实现真正的“同时”运行。这里可以将程序类比为车辆,而CPU核心类比为车道,多车道允许多辆车并排行驶,即多任务可以真正地同时进行。 #### 并发的概念 并发Concurrency)则是一种宏观上的效果,指的是多个任务在一段时间内交替执行,尽管在微观上这些任务并非真正地同时运行[^2]。在这种模式下,系统通过快速切换任务的执行权,使得用户感知到多个任务似乎是在同时进行。实际上,单个CPU会在不同任务之间快速轮换执行指令,而不是同时处理多个任务。 #### 并发并行区别 1. **硬件依赖**:并行要求系统具备多处理器或多核CPU的支持,以实现任务的同时运行[^1];而并发可以在单核CPU上实现,通过时间片分配机制完成任务的快速切换[^2]。 2. **执行方式**:并行强调的是“真正的同时性”,多个任务在同一时刻由不同的处理器或核心执行;而并发强调的是“宏观上的同时性”,多个任务在微观上通过时间分片交替执行。 3. **性能开销**:并行由于涉及多处理器间的通信同步,可能会带来额外的开销;而并发主要依赖于上下文切换,频繁的切换可能导致一定的性能损耗。 ```python # 并发示例:通过线程实现任务交替执行 import threading import time def task_a(): for i in range(5): print("Task A", i) time.sleep(0.1) def task_b(): for i in range(5): print("Task B", i) time.sleep(0.1) thread_a = threading.Thread(target=task_a) thread_b = threading.Thread(target=task_b) thread_a.start() thread_b.start() thread_a.join() thread_b.join() # 并行示例:通过多进程实现任务同时执行 from multiprocessing import Process def process_task_a(): for i in range(5): print("Process Task A", i) time.sleep(0.1) def process_task_b(): for i in range(5): print("Process Task B", i) time.sleep(0.1) process_a = Process(target=process_task_a) process_b = Process(target=process_task_b) process_a.start() process_b.start() process_a.join() process_b.join() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值