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


当前回答

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

其他回答

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

举个例子:

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

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

简单来说:

同步

你在排队买电影票。在你前面的每个人都买到之前,你不可能买到,在你后面排队的人也一样。

异步

你和很多人在一家餐馆里。你点餐。其他人也可以点他们的食物,他们不需要等你的食物煮好并端上来才可以点餐。 餐厅的工作人员在厨房里不停地做饭、上菜、接单。 人们的食物一做好就会端上来。

当您同步执行某项任务时,您需要等待该任务完成后才能继续执行另一项任务。当您异步执行某个任务时,您可以在它完成之前转移到另一个任务。

在操作系统上下文中,这对应于在“线程”上执行进程或任务。线程是作为工作单元存在的一系列命令(代码块)。操作系统在处理器核心上运行给定的线程。然而,处理器内核一次只能执行一个线程。它没有同时运行多个线程的概念。操作系统可以通过运行每个线程一小段时间(比如1ms),并在线程之间不断切换,来提供同时运行多个线程的假象。

现在,如果您在混合中引入多个处理器核心,那么线程可以同时执行。操作系统可以将时间分配给第一个处理器核心上的一个线程,然后将相同的时间块分配给不同处理器核心上的另一个线程。所有这些都是关于允许操作系统管理任务的完成,而您可以继续在代码中执行其他事情。

异步编程是一个复杂的主题,因为当您可以同时进行这些事情时,它们是如何结合在一起的语义。关于这个主题的文章和书籍数不胜数;看看吧!

是的,同步的意思是同时,从字面上看,它的意思是一起做功。世界上的多个人/物体可以同时做多件事,但如果我们看看计算机,它说同步意味着进程一起工作,意味着进程依赖于另一个的返回,这就是为什么它们以适当的顺序一个接一个地执行。异步意味着进程不能一起工作,它们可以同时工作(如果在多线程上),但是独立工作。

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

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

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

这有意义吗?