异步和同步的区别是什么?
一起探讨探讨这么判断是否有问题?
前提或者说是共识
学习异步和同步你可能需要了解一些前提
- 异步、同步是指两个及以上有交织的个体间的事情(有交织是指有为同一间事情付出过,或者是表示有因果关系的)
- 异步、同步是相对事件(需要有对照才能判断)
- 需要规定某个时间段内发生(你不可能要求两个个体在任何时间都处于同步或者异步的情况,同卵双胞胎都做不到)
了解这两点,你才能了解什么是异步、同步。
异步和同步是什么?
核心
- 前提:两个个体
- 时间和事件是否相同
异步相当于:两个有交织的个体 相同的时间,不同的事件 and 相同的事件,不同的时间(强调交错)
同步相当于:两个有交织的个体 相同的时间,相同的事件 and 相同的事件,相同的时间(强调相同)
探索过程
异步和同步,我们需要拆开看
首先了解什么是 “异”什么是“同”?
分别表示不同和相同两个概念
那么步呢?
我觉得表示阶段;**步长;阶段 ** 或者更加宽泛点我们可以认为是 动作和时间
再宽泛点我们可以认为是 事件和时间
综合起来就表示:
异步相当于:两个有交织的个体 相同的时间,不同的事件 and 相同的事件,不同的时间(强调交错)
同步相当于:两个有交织的个体 相同的时间,相同的事件 and 相同的事件,相同的时间(强调相同)
PS: 这里的时间表示某段时间,而不是一直都是这样
也就是说,两个有交织的个体是在同一时间段内(同步)还是错位时间段内(异步)为同一件事情花费精力
现在带入现实生活中去看看:
案例
案例转载自:从小白到高手,10 图教你同步与异步
第一个案例
首先老板在数钱的时候你还没搬砖
如果你只看这段时间的话,你可以认为他是异步,包括底下这段也是
当然你要说数钱是个 IO 操作那么,上图这段需要两根柱子,一根是程序阻塞等待,另一根是DMA处理IO操作。同步异步本身就随时发生着,这就跟爱因斯坦相对论一样,看你参考系分的细不细咯。
上面这段很明显的看出来是 相同时间,相同事件,这是同步操作
老板阻塞等待你搬砖完毕,都是再为你搬砖花费精力,只不过你花的多,他花的少而已
下图这段是相同时间,不同事件并且他们是有交织的,或者说他们是有因果关系的:
第二个案例
第三个案例
第四个案例
最后需要注意的是,并不是所有的情况下异步都一定比同步高效,还需要结合具体业务以及IO的复杂度具体情况具体分析。
由于是很久以前记得笔记,忘记是哪个大佬设计的图片,所以不好意思,没有留图片转发地址
并发和并行的区别是什么?
如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。并发系统与并行系统这两个定义之间的关键差异在于**“存在”这个词。
在并发程序中可以同时拥有两个或者多个线程。这意味着,如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。这些线程是同时“存在”的——每个线程都处于执行过程中的某个状态。如果程序能够并行执行,那么就一定是运行在多核处理器上。此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行。
我相信你已经能够得出结论——“并行”概念是“并发”概念的一个子集**。也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么就不能以并行方式来运行代码。因此,凡是在求解单个问题时涉及多个执行流程的编程模式或者执行行为,都属于并发编程的范畴。
摘自:《并发的艺术》 — 〔美〕布雷谢斯