异步执行和同步执行之间的区别是什么?
当前回答
我创建了一个动图来解释这一点,希望能有所帮助: 看,第3行是异步的,其他是同步的。 在行3之前的所有行都应该等到行完成它的工作,但因为行3是异步的,下一行(行4),不要等待行3,但行5应该等待行4完成它的工作,行6应该等待行5和7的6,因为行4,5,6,7不是异步的。
其他回答
当您同步执行某项任务时,您需要等待该任务完成后才能继续执行另一项任务。当您异步执行某个任务时,您可以在它完成之前转移到另一个任务。
在操作系统上下文中,这对应于在“线程”上执行进程或任务。线程是作为工作单元存在的一系列命令(代码块)。操作系统在处理器核心上运行给定的线程。然而,处理器内核一次只能执行一个线程。它没有同时运行多个线程的概念。操作系统可以通过运行每个线程一小段时间(比如1ms),并在线程之间不断切换,来提供同时运行多个线程的假象。
现在,如果您在混合中引入多个处理器核心,那么线程可以同时执行。操作系统可以将时间分配给第一个处理器核心上的一个线程,然后将相同的时间块分配给不同处理器核心上的另一个线程。所有这些都是关于允许操作系统管理任务的完成,而您可以继续在代码中执行其他事情。
异步编程是一个复杂的主题,因为当您可以同时进行这些事情时,它们是如何结合在一起的语义。关于这个主题的文章和书籍数不胜数;看看吧!
同步执行意味着在单个系列中执行。A - C > B - > - > D。如果您正在调用这些例程,则A将运行,然后结束,然后B将开始,然后结束,然后C将开始,等等。
使用异步执行,你开始一个例程,并让它在后台运行,同时你开始下一个例程,然后在某个时候,说“等待这个完成”。更像是:
开始A->B->C->D->等待A完成
这样做的好处是,当A仍在运行时(在后台,在一个单独的线程上),您可以执行B、C和或D,因此您可以更好地利用资源,减少“挂起”或“等待”。
简单地说,异步执行是在后台做一些事情。
例如,如果你想从互联网上下载一个文件,你可以使用同步函数来做这件事,但它会阻塞你的线程,直到文件下载完成。这可能使您的应用程序对任何用户输入都没有响应。
相反,您可以使用异步方法在后台下载文件。在这种情况下,下载函数立即返回,程序继续正常执行。所有的下载操作都是在后台完成的,当你的程序完成时会收到通知。
我认为一个很好的方法是把它看作是一个经典的跑步接力赛
同步:流程就像同一个团队的成员一样,它们直到收到接力棒(前一个流程/运行者执行的结束)才会执行,但它们彼此都是同步的。
异步:在同一接力赛跑道上的不同团队的成员,他们将运行和停止,彼此异步,但在同一场比赛中(整体程序执行)。
这有意义吗?
同步基本上意味着一次只能执行一件事情。异步意味着您可以一次执行多个任务,并且不必为了移动到下一个任务而完成当前任务。