总结并发、并行、同步、异步等概念

 我来答
舒适还明净的海鸥i
2022-07-27 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:70万
展开全部

在多线程程序中经常使用并发、并行,同步、异步这两组概念,那么下面说一下我所理解的这两组概念的联系与区别。

并发 指两个或两个以上的事件在同一时间段内发生(注意:
这里指的时间段是在微观上看,所以它很短,我们感觉不出来事件发生的时间差)。
并发意味着应用程序同时在多个任务上取得进展。那么,如果计算机只有一个CPU,应用程序可能不会同时完成多个任务,但在应用程序的某个时间内正在处理多个任务。它不能完全完成一个任务,然后再开始下一个任务。

并行 指两个或两个以上的事件在同一时刻发生。
并行意味着应用程序拆分成更小的子任务,这些任务可以并行处理,例如在多CPU在同一时间。

如上,并发性与应用程序处理多个任务的方式有关。应用程序可以在某个时间(顺序地)处理一个任务,或者同时处理多个任务。
另一方面,并行性与应用程序如何处理每个单独的任务有关。一个应用程序可以处理连续的任务从开始到结束,或将任务分解成子任务可以并行完成。

并发可认为是一种逻辑结构的设计模式。你可以用并发的设计方式去设计模型,然后运行在一个单核系统上,通过系统动态地逻辑切换制造出并行的假象。此时,你的程序不是并行,但是是并发的。你可以将这种模型不加修改地运行在多核系统上,此时你的程序可以认为是并行。而并行则更关注的是程序的执行。

串行 指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。

同步
串行是同步线程实现的方式。一个任务执行完成后才能执行下一个任务,单线程只能执行一个任务。

异步 就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。

并发和并行其实是异步线程实现的两种形式。并行其实是真正的异步,多核CUP可以同时开启多条线程供多个任务同时执行,互补干扰。但是并发就不一样了,是一个伪异步。在单核CUP中只能有一条线程,但是又想执行多个任务。这个时候,只能在一条线程上不停的切换任务。

同步和异步是在多任务的情况下,这是前提。其次,同步和异步是指逻辑调用方式。同步的前一个逻辑调用的输出作为第二个逻辑调用的输入,后一个逻辑调用必须等待前一个调用执行完才能开始调起执行。正好与同步相反,后一个逻辑调用无需等待前一个逻辑调用执行完毕。也就是说前一个逻辑调用发起后就直接返回了,并没有输出,而是在调用执行完成后通过状态、通知来通知调用者,或通过回调函数处理这个调用。

本文摘录了一下网上相关内容以及自己的一些理解,有问题请留言,谢谢啦!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式