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


当前回答

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

小例子:

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

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

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

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

其他回答

同步操作在返回调用方之前完成其工作。

异步操作在返回调用方之后完成(大部分或全部)工作。

以下是制作早餐的说明:

倒一杯咖啡。 烧热平底锅,然后煎两个鸡蛋。 煎三片培根。 烤两片面包。 在吐司上加黄油和果酱。 倒一杯橙汁。 如果你有烹饪经验,你会异步执行这些指令。你会先热锅煎鸡蛋,然后开始煎培根。你把面包放进烤面包机,然后开始煎鸡蛋。在这个过程的每一步,你都要开始一项任务,然后把注意力转移到那些已经准备好的任务上。 做早餐就是一个非并行的异步工作的好例子。一个人(或线程)可以处理所有这些任务。继续早餐的类比,一个人可以异步地做早餐,在第一个任务完成之前开始下一个任务。不管有没有人在看,烹饪都在进行。一旦你开始加热煎蛋的锅,你就可以开始煎培根了。培根烤好后,你可以把面包放进烤面包机。 对于并行算法,您需要多个cook(或线程)。一个做鸡蛋,一个做培根,等等。每个人都只专注于一项任务。每次烹饪(或线程)都将同步阻塞,等待培根准备翻转,或吐司爆裂。

(强调我的)

异步编程概念

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

小例子:

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

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

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

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

我创建了一个动图来解释这一点,希望能有所帮助: 看,第3行是异步的,其他是同步的。 在行3之前的所有行都应该等到行完成它的工作,但因为行3是异步的,下一行(行4),不要等待行3,但行5应该等待行4完成它的工作,行6应该等待行5和7的6,因为行4,5,6,7不是异步的。

简单地说,异步执行是在后台做一些事情。

例如,如果你想从互联网上下载一个文件,你可以使用同步函数来做这件事,但它会阻塞你的线程,直到文件下载完成。这可能使您的应用程序对任何用户输入都没有响应。

相反,您可以使用异步方法在后台下载文件。在这种情况下,下载函数立即返回,程序继续正常执行。所有的下载操作都是在后台完成的,当你的程序完成时会收到通知。