有关并发和并行的问题解析

首先并发和并行是操作系统中的相关名词,
“并行”是指无论从微观还是宏观,二者都是一起执行的,就好像两个人各拿一把 铁锨 在挖坑,一小时后,每人一个大坑,即双发执行中没有相关的影响
而“并发”在微观上不是同时执行的, CPU 只是把时间分成若干段,使多个线程快速交替的执行,从宏观外来看,好像是这些线程都在执行,这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时。
从以上本质不难看出,“并发”执行,在多个进程存在资源冲突时,并没有从根本提高执行效率。
### 并发并行的概念区分 在编程语言系统设计中,并发(Concurrency)并行(Parallelism)是两个密切相关但本质不同的概念。并发指的是处理多个任务的能力,这些任务可能交替执行而不是同时运行;而并行则强调在同一时间通过多核或多处理器来真正同时执行多个任务。 具体来说,并发是一种程序结构特性,它允许一个应用程序管理多个独立的任务流或操作序列[^1]。即使是在单核 CPU 上也可以实现并发,因为操作系统会通过上下文切换让不同任务看起来像是同时进行的。然而,在这种情况下,实际上只有一个任务会在任何给定时刻被实际执行。 相比之下,并行更关注于硬件层面的支持以及如何利用现代计算机中的多核心架构来升性能。当并行时,意味着有真正的物理资源分配给各个子计算单元以便它们可以同步工作以完成更大的整体目标。 #### 应用场景分析 对于需要频繁交互或者等待外部事件响应的应用而言,采用高效的并发模型是非常重要的。例如Web服务器需要同时服务于成千上万用户的请求,这里主要依赖的是良好的调度算法而非单纯的增加CPU数量就能解决问题的情况就非常适合使用基于协程(coroutine)或其他轻量级线程机制构建起来的高效率异步IO框架来进行开发。 另一方面,科学计算领域内的矩阵运算、图像渲染等数据密集型任务,则更适合采取并行策略加以解决。这类应用通常涉及大量重复性的数值计算过程,能够很容易划分成为若干相互独立的小部分交给不同的处理器去分别负责各自那一份的工作负荷从而达到加速整个流程的目的。 ```python import concurrent.futures def compute(x, y): return x * y with concurrent.futures.ThreadPoolExecutor() as executor: future_to_result = {executor.submit(compute, i, i): i for i in range(10)} for future in concurrent.futures.as_completed(future_to_result): num = future_to_result[future] try: result = future.result() print(f'{num} squared is {result}') except Exception as exc: print('%r generated an exception: %s' % (num, exc)) ``` 上述代码片段展示了Python标准库`concurrent.futures`模块下的ThreadPoolExecutor类实例化对象用于交函数调用到内部维护的一个固定大小池子里由可用工作者线程取出来依次执行完毕后再返回结果的过程,这属于典型意义上的并发模式运用案例之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值