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


当前回答

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

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

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

这有意义吗?

其他回答

你混淆了同步与并联与串联。同步的意思是同时发生所有的事情。同步的意思是彼此相关,可以是串联的,也可以是固定间隔的。当程序在做所有的事情时,它是串联运行的。找本字典……这就是为什么我们有不甜的茶。你有茶或甜茶。

举个简单的例子,

同步

想象一下,三个学生被要求在公路上进行接力赛。

第一个学生跑完指定的距离,停下来把接力棒传给第二个。没有人开始跑步。

1------>
        2.
                3.

当第二个学生拿起接力棒时,她开始跑指定的距离。

      1.
        2------>
                3.

第二个学生解开了鞋带。现在她又停了下来,重新系上了领带。因此,2号的结束时间延长了,3号的开始时间推迟了。

      1.
        --2.--->
                3.

这种模式一直持续到第三名从第二名手中接过接力棒并完成比赛。

异步

想象一下,10个人随机走在同一条路上。 他们当然不是在排队,只是随机地在路上不同的地方以不同的速度行走。

第二个人的鞋带被解开了。她停下来又把它扎了起来。

但没人等着她把头发扎起来。其他人都还在以同样的速度走着他们以前的路。

10-->    9-->
   8--> 7-->   6-->
 5-->     4-->
1-->   2.    3-->

同步是指以队列方式逐一执行任务。假设只有一辆车需要在朋友之间共享才能到达目的地,一辆车将被共享。 在异步情况下,每个朋友都可以租到车并到达目的地。

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

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

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

同步是指调用方等待响应或完成,异步是指调用方继续执行并且稍后出现响应(如果适用的话)。

举个例子:

static void Main(string[] args)
{
    Console.WriteLine("Before call");
    doSomething();
    Console.WriteLine("After call");
}

private static void doSomething()
{
    Console.WriteLine("In call");
}

这将总是输出:

Before call
In call
After call

但如果我们要使doSomething()异步(有多种方式来做它),那么输出可以变成:

Before call
After call
In call

因为进行异步调用的方法将立即继续执行下一行代码。我之所以说“可能”,是因为异步操作无法保证执行顺序。它也可以作为原始文件执行,这取决于线程计时等。