异步执行和同步执行之间的区别是什么?
当前回答
简单地说,异步执行是在后台做一些事情。
例如,如果你想从互联网上下载一个文件,你可以使用同步函数来做这件事,但它会阻塞你的线程,直到文件下载完成。这可能使您的应用程序对任何用户输入都没有响应。
相反,您可以使用异步方法在后台下载文件。在这种情况下,下载函数立即返回,程序继续正常执行。所有的下载操作都是在后台完成的,当你的程序完成时会收到通知。
其他回答
同步执行意味着在单个系列中执行。A - C > B - > - > D。如果您正在调用这些例程,则A将运行,然后结束,然后B将开始,然后结束,然后C将开始,等等。
使用异步执行,你开始一个例程,并让它在后台运行,同时你开始下一个例程,然后在某个时候,说“等待这个完成”。更像是:
开始A->B->C->D->等待A完成
这样做的好处是,当A仍在运行时(在后台,在一个单独的线程上),您可以执行B、C和或D,因此您可以更好地利用资源,减少“挂起”或“等待”。
关于同步执行的“同时”定义(有时会令人困惑),下面是一种理解它的好方法:
同步执行:一个代码块中的所有任务都在同一时间执行。
异步执行:一个代码块中的所有任务都不会同时执行。
简单来说:
同步
你在排队买电影票。在你前面的每个人都买到之前,你不可能买到,在你后面排队的人也一样。
异步
你和很多人在一家餐馆里。你点餐。其他人也可以点他们的食物,他们不需要等你的食物煮好并端上来才可以点餐。 餐厅的工作人员在厨房里不停地做饭、上菜、接单。 人们的食物一做好就会端上来。
简而言之,同步指的是两个或多个进程的起点和终点,而不是它们的执行。在本例中,进程A的端点与进程B的起点同步:
SYNCHRONOUS |--------A--------| |--------B--------|
另一方面,异步进程的起点和终点不同步:
ASYNCHRONOUS |--------A--------| |--------B--------|
在进程A与进程B重叠的地方,它们是并发或同步运行的(字典定义),因此造成了混淆。
更新:Charles Bretana改进了他的答案,所以这个答案现在只是一个简单的(可能过于简化了)助记符。
我认为一个很好的方法是把它看作是一个经典的跑步接力赛
同步:流程就像同一个团队的成员一样,它们直到收到接力棒(前一个流程/运行者执行的结束)才会执行,但它们彼此都是同步的。
异步:在同一接力赛跑道上的不同团队的成员,他们将运行和停止,彼此异步,但在同一场比赛中(整体程序执行)。
这有意义吗?
推荐文章
- 平行的。ForEach vs Task。运行和任务。WhenAll
- 很好的介绍了。net响应式框架
- 一个干净、轻量级的Python扭曲的替代品?
- 如何在package.json中使用“main”参数?
- 什么时候我应该在ASP中使用异步控制器。净MVC吗?
- 理解设置
- 如何使HTTP请求在PHP和不等待响应
- 反应-显示加载屏幕,而DOM是渲染?
- 如何正确地读取异步/等待文件?
- 使用Moq模拟单元测试的异步方法
- 如何使用JUnit来测试异步进程
- Kotlin协程中的启动/连接和异步/等待之间有什么区别
- 如何告诉PowerShell等待每个命令结束后才开始下一个?
- CompletableFuture, Future和RxJava的Observable之间的区别
- 为什么要在c#中使用Task<T>而不是ValueTask<T> ?