同步和异步的区别是什么?

319 阅读4分钟

异步和同步的区别是什么?

一起探讨探讨这么判断是否有问题?

前提或者说是共识

学习异步和同步你可能需要了解一些前提

  1. 异步、同步是指两个及以上有交织的个体间的事情(有交织是指有为同一间事情付出过,或者是表示有因果关系的)
  2. 异步、同步是相对事件(需要有对照才能判断)
  3. 需要规定某个时间段内发生(你不可能要求两个个体在任何时间都处于同步或者异步的情况,同卵双胞胎都做不到)

了解这两点,你才能了解什么是异步、同步。

异步和同步是什么?

核心

  1. 前提:两个个体
  2. 时间和事件是否相同

异步相当于:两个有交织的个体 相同的时间,不同的事件 and 相同的事件,不同的时间(强调交错)

同步相当于:两个有交织的个体 相同的时间,相同的事件 and 相同的事件,相同的时间(强调相同)

探索过程

异步和同步,我们需要拆开看

首先了解什么是 “异”什么是“同”?

image.png

image.png

分别表示不同和相同两个概念

那么步呢?

image.png

我觉得表示阶段;**步长;阶段 ** 或者更加宽泛点我们可以认为是 动作和时间

再宽泛点我们可以认为是 事件和时间

综合起来就表示:

异步相当于:两个有交织的个体 相同的时间,不同的事件 and 相同的事件,不同的时间(强调交错)

同步相当于:两个有交织的个体 相同的时间,相同的事件 and 相同的事件,相同的时间(强调相同)

PS: 这里的时间表示某段时间,而不是一直都是这样

也就是说,两个有交织的个体是在同一时间段内(同步)还是错位时间段内(异步)为同一件事情花费精力

现在带入现实生活中去看看:

案例

案例转载自:从小白到高手,10 图教你同步与异步

第一个案例

image.png

首先老板在数钱的时候你还没搬砖

image.png

如果你只看这段时间的话,你可以认为他是异步,包括底下这段也是

image.png

当然你要说数钱是个 IO 操作那么,上图这段需要两根柱子,一根是程序阻塞等待,另一根是DMA处理IO操作。同步异步本身就随时发生着,这就跟爱因斯坦相对论一样,看你参考系分的细不细咯。

image.png

上面这段很明显的看出来是 相同时间,相同事件,这是同步操作

老板阻塞等待你搬砖完毕,都是再为你搬砖花费精力,只不过你花的多,他花的少而已

image.png

下图这段是相同时间,不同事件并且他们是有交织的,或者说他们是有因果关系的:

image.png

第二个案例

image.png

image.png

第三个案例

image.png

image.png

image.png

第四个案例

image.png

image.png

image.png

最后需要注意的是,并不是所有的情况下异步都一定比同步高效,还需要结合具体业务以及IO的复杂度具体情况具体分析。

由于是很久以前记得笔记,忘记是哪个大佬设计的图片,所以不好意思,没有留图片转发地址

并发和并行的区别是什么?

如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。并发系统与并行系统这两个定义之间的关键差异在于**“存在”这个词。
在并发程序中可以同时拥有两个或者多个线程。这意味着,如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。这些线程是同时“存在”的——每个线程都处于执行过程中的某个状态。如果程序能够并行执行,那么就一定是运行在多核处理器上。此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行。
我相信你已经能够得出结论——
“并行”概念是“并发”概念的一个子集**。也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么就不能以并行方式来运行代码。因此,凡是在求解单个问题时涉及多个执行流程的编程模式或者执行行为,都属于并发编程的范畴。
摘自:《并发的艺术》 — 〔美〕布雷谢斯