异步执行和同步执行之间的区别是什么?


当前回答

简而言之,同步指的是两个或多个进程的起点和终点,而不是它们的执行。在本例中,进程A的端点与进程B的起点同步:

SYNCHRONOUS
   |--------A--------|
                     |--------B--------|

另一方面,异步进程的起点和终点不同步:

ASYNCHRONOUS
   |--------A--------|
         |--------B--------|

在进程A与进程B重叠的地方,它们是并发或同步运行的(字典定义),因此造成了混淆。

更新:Charles Bretana改进了他的答案,所以这个答案现在只是一个简单的(可能过于简化了)助记符。

其他回答

我认为一个很好的方法是把它看作是一个经典的跑步接力赛

同步:流程就像同一个团队的成员一样,它们直到收到接力棒(前一个流程/运行者执行的结束)才会执行,但它们彼此都是同步的。

异步:在同一接力赛跑道上的不同团队的成员,他们将运行和停止,彼此异步,但在同一场比赛中(整体程序执行)。

这有意义吗?

同步基本上意味着一次只能执行一件事情。异步意味着您可以一次执行多个任务,并且不必为了移动到下一个任务而完成当前任务。

我认为这是一个有点迂回的解释,但它仍然澄清了使用现实生活中的例子。

小例子:

让我们假设播放音频包含三个步骤:

从硬盘中获取压缩的歌曲 解压音频。 播放未压缩的音频。

如果你的音频播放器为每首歌依次执行步骤1、2、3,那么它就是同步的。你必须等待一段时间才能听到这首歌,直到这首歌真正被提取和解压。

如果你的音频播放器独立执行第1、2、3步,那么它就是异步的。ie。 当播放音频1(步骤3)时,如果它并行地从硬盘中获取音频3(步骤1),并且并行地解压音频2。(第二步) 你最终会听到这首歌,而不需要等待太多的取回和解压。

关于同步执行的“同时”定义(有时会令人困惑),下面是一种理解它的好方法:

同步执行:一个代码块中的所有任务都在同一时间执行。

异步执行:一个代码块中的所有任务都不会同时执行。

同步执行意味着在单个系列中执行。A - C > B - > - > D。如果您正在调用这些例程,则A将运行,然后结束,然后B将开始,然后结束,然后C将开始,等等。

使用异步执行,你开始一个例程,并让它在后台运行,同时你开始下一个例程,然后在某个时候,说“等待这个完成”。更像是:

开始A->B->C->D->等待A完成

这样做的好处是,当A仍在运行时(在后台,在一个单独的线程上),您可以执行B、C和或D,因此您可以更好地利用资源,减少“挂起”或“等待”。